2005年03月
花粉症?
今日はやけに目が痒かった。つか今も痒い。
就職活動
今日は会議で久々に本社ビルへ行ったら、入社試験の二次面接の張り紙があって学生らしき若人がウロウロしてた。早!まだ3/31ですよ。つまり大学3年生な訳ですよ。私は確か4年生の初夏の頃に会社回りを始めて決めてたんだが…。青田買いにも程があるっつーか。大学3年から就職活動とは恐るべし。
Pixiaのプラグイン関連
結論から言うと、3/28の方法で正しかった模様。トレースを入れたデバッグ用プラグインを作って試したら想定通りの動作をするから、上手く動かないのはプラグイン側の問題と思われる。
PictBearから呼び出すと動かないと言うし。問題のフィルターはBorland C++ Compiler 5.5で作られてるらしい事が関係あるのかも知れない。
ていうか寧ろ本家Pixiaでは何故動いているんだろう?考え付く対策としては、きわ氏のフィルターにだけは見分けて何か特別配慮付きの別関数を作りそこへのポインタをパラメータとして渡しているとか?そんな事は可能なのか?DLLを作ったコンパイラの種別をどうにかして判別してるのかも。
Platform SDK
をWindows Server 2003 SDKからWindows XP SP2 Platform SDKに変えたら、VC++ 5.0でもGDI+のコンパイルが通る様になった。んが、上記のごとくCImage使う様に変更したのでMFC7.0が無いのでそっちで引っかかる。αなHBITMAPとGDI+の関連付けが自前で出来れば、VC++ 5.0でも行けるはずなんだけど、まぁこれは金で解決しよう。それよりPixiaのDLLを…。
どうでもいいが、GDI+で検索するとJPEGアクセスルーチンのバッファオーバーランの話ばっかり。
CImage
という、GDI+のラッパークラスがMFC7には有ったのでこれで万事解決。
昨日、αチャンネルが潰れたのはおそらくこう。
GDI+のイメージを作成する時に画像データをHBITMAPの形で渡さねばならん。のでわざわざDIBセクションなHBITMAP作ってそこにデータ書いて、それをGDI+に渡した。が、このHBITMAPは只のGDIでαに対応していないので無視した。
CImageのCreateでα対応なDIBセクション作ってそこにデータをmemcpyしたら上手く行った。
GetBits()は、データ領域の先頭アドレスを返したり、データ領域の末尾付近のアドレスを返したりするので注意。Create時の高さの指定によって、画像の左上か左下を指す。
問題はこれはVisual Studio 97では使えない事。
虫のフンだった!…古墳石室の土粒、学者ら「まさか」
GDI+
は家のVC++ 5.0では駄目だった。gdi関連のヘッダーでコンパイルエラーが山ほど。もう全然駄目。見る気もしない。VS2005が出たら絶対買おうっと。9年も使えば十分だ。
が、お昼休みに会社のVisual Studio 2002で練習した。ファイルの読み書きは会得した。これで読み書きできる画像フォーマットが一気に増えた。さらばlibpng,libjpeg,libtif。でも書き出すと32bit画像にはなってるんだけどPNGのαが255で埋め尽くされる…。
不思議なのが、ロードの際はファイル名指定するだけなんだけど、セーブの時はCODECのCLSIDを指定しなければいけない点。ファイル名がaaa.jpgでエンコーダにGIFとか指定したらどうするんだろう?
Pixia DLLの方は相変わらずまだ不明。今日はもう止めて絵の仕上げでもするか。
sakusaku
Platform SDKインストール
関係無いけど、GDI+目当てにVC++ 5.0なのにPlatform SDK 2003をインストール。これでTIFFも読めるようになるかも。いつも思うんだが、ツールやライブラリやドキュメント等、開発環境を無料でばらまくMicrosoftは太っ腹だな。特にドキュメント。