More Related Content
PDF
202006 のの会@関数Talk 21st @function-talk-in-notesknows-workshop PDF
PDF
202003 functiontalkinnotesknowsworkshop20th PDF
魅せる・際立つ・役立つグラフ Hands on!! ggplot2!! ~導入編~ PDF
PDF
ラムダでウィザード 滅せよ手続き、とチャーチは言った (※言ってません) ODP
Scoped BASIC Presentation1 PPTX
What's hot
PDF
PDF
オブジェクト指向の皮をかぶった関数型プログラミング言語 Haxe PPTX
PDF
2011.7.3 札幌C++勉強会#2「C++のマクロはどこまで関数をいじれるのか」 PDF
PPTX
PDF
saiはRに宿るか? -RStudioとggplot2で碁を打つ- PPTX
PDF
PDF
PDF
PDF
PDF
PPTX
PDF
Viewers also liked
DOCX
PPTX
2. how does your media product represent social groups PPTX
PPTX
Dentin -kunal parekh..advancd oral biology PPTX
ODP
PPTX
PPTX
Capacitacion antitabaco jefe alex camacho PPT
6 Actions To Build Your Dream PDF
Hire iPhone App Developers PPTX
Innovation and Acceleration through Social Online Collaboration Idea Campaigns PDF
DOC
PPT
Hail storms - elementary level PPT
Clouds, storms & the bible PPTX
Jamie Gorski at Landlord WEBCON 2014 PDF
Amey mahant's presentation PDF
PPSX
Similar to Hokkaido.pm.casual #03 slide
PPTX
Perl Hobby Programming - Games::BeLike::EightBIT ターミナルで8ビット風ゲームをつくろう PPTX
PDF
PDF
名古屋Ruby会議01 A3.製造業向け3Dデータ変換ソリューションにおけるRuby活用事例 PDF
Pythonで画像処理をやってみよう!第2回 - 動く物体の抜き出し - PDF
PPTX
PDF
Ruby を用いた超絶技巧プログラミング(夏のプログラミングシンポジウム 2012) PPT
PPTX
PPTX
PPTX
PDF
PPTX
実録『すぐわかるPerl』〜社内ツール悲喜こもごも〜 PDF
PDF
PDF
Python Imaging Libraryの紹介 PDF
PCD2019 TOKYO ワークショップ「2時間で!Processingでプログラミング入門」 PDF
openFrameworks Workshop in Kanazawa v001 PDF
毎秒2000Requestを捌くPerl製CMSの内部構造(Debianサーバ1台にて) Hokkaido.pm.casual #03 slide
- 1.
- 2.
Perl でファイル入出力?
お、やったことあるぞ。
というか、実際そればっかりだし。
しかし、「全部自分で書く派」だから、
皆さんの役に立つかなぁ?
でも、ここを逃したら、「自己紹介」し
かないぞ。
しょうがない。やってまえ。
- 3.
TAB 区切りデータから BMPを作
る
業務でやったこと。
タックシール印刷アプリの関係。
寸法データから、見本用の Thumbnail 画
像を生成する作業。
年2~3回データを更新する都度、実施
する。
タックシールの寸法データは 2000 件を越
えるので、手で描いていたら終わらない
。
- 4.
- 5.
入力ファイルの項目
#0 メーカー名 #10 1 片縦
#1 メーカーコード #11 1 片横
#2 型番 #12 上余白
#3 用紙サイズ名 #13 下余白
#4 用紙縦 #14 左余白
#5 用紙横
#15 右余白
#6 面数
#7 縦の面数
#16 上下間隔
#8 横の面数
#17 左右間隔
#9 1片のサイズ #18 登録日
- 6.
要求仕様
「タックシール設定」フォルダ以下に、
メーカー名のフォルダを作成して、その中に
型番をファイル名とする BMP ファイルを作
成する。
ビットマップは縦 78pixel× 横 98pixel とす
る。
上記のビットマップの中央部分にフィッ
トするように、タックシール用紙の模式
図を描く。
- 7.
出力ファイル
Device-Independent Bitmap
( Windows )
いわゆる .bmp 形式( Windows DIB とも)
24bit Color Depth が単純で使いやすい
先頭 54bytes のヘッダ
データ部分は、 pixel の RGB 値が青→緑→赤の順
に
3 バイト( 24bit )の配列として並んで格納されて
いる
これが出力すればあとは画像変換ソフトで、
どんな形式でも変換可能( jpeg や png も)
- 8.
設計コンセプト
図形を見てみると横線と
縦線と塗りでできている
縦線は短い横線で表現で
きる
塗りは横線をたくさん引
けば表現できる
割と単純に実装できそう
- 9.
当時の設計
1. 全てが 233 という数値を取る 22932 個
の要素を持つ配列を作る
RGB 値 ( 233, 233, 233 )のグレー
縦 78× 横 98pixel×3byte 分の bytes 列
2. ここに台紙や各紙片を描けばいい
3. 適切にフィットさせるために、縮尺や座
標系の変換は必要
- 10.
当時の設計
4. 横線を描く関数
sub drawLineHolizontal {
local($posX,$posY,$length,$color,*bitpattern) = @_;
local($i) = 0;
$posX = int($posX / $scale);
$posY = int($posY / $scale);
$length = int($length / $scale);
if($length + $posX > $BMP_width) {$length = $BMP_width - $posX;}
for($i=0;$i<=$length;$i++) {
$bitpattern[$posY * $BMP_width + $i+ $posX] = $color;
}
}
- 11.
当時の設計
5. 縦線を描く関数
sub drawLineVertical {
local($posX,$posY,$length,$color,*bitpattern) = @_;
$posX = int($posX / $scale);
$posY = int($posY / $scale);
$length = int($length / $scale);
local($i) = 0;
if($length + $posY > $BMP_height) {$length = $BMP_height - $posY;}
for($i=0;$i<=$length;$i++) {
$bitpattern[($posY + $i) * $BMP_width + $posX] = $color;
}
}
- 12.
当時の設計
6. 矩形を描く
縦線を 2 本、横線を 2 本描く
さきほどの drawLineVertical() を 2 回呼ぶ
さきほどの drawLineHolizontal() を 2 回呼ぶ
6. 矩形で塗りつぶす
横線をいっぱい描く(笑)
さきほどの drawLineHolizontal() を高さ分呼ぶ
逆でもいいけど、計算速度的にアレなので
- 13.
当時の設計
8. フォルダを掘る
mkdir(" タックシール設定 ",0755);
for($i=0;$i<=$#foldername;$i++) {
mkdir(" タックシール設定 ".$foldername[$i],0755);
}
8. ヘッダをつけてバイナリモードで書き出
す
binmode($fh); とか
$buff .= pack(“C*”,$GValue); とか
- 14.
- 15.
- 16.