あまつぶ

8.11 【2.0?】

 雨でちょっと日程がくるってきた感じ。全然関係ないけど「狂って」って書くとほんとにくるってるような気がしていけない。したがって、「くるって」と表記。

 QT-Q 2.0(仮)のこと。試しに減色+PNG化の機能を追加してみることにした。減色のアルゴリズムとかは知らないので(一応動くようになったら調べるつもりはあるけど)まずはQuickDrawのお世話になる。GetPixMapInfo()でカラーパレットを取得して新しいGWorldを作り、そこにCopyBits()でコピーする。ま、そんな流れ。
 PNG化については、QuickTimeを使用。圧縮自体はCompressImage()を使えば簡単にできるけど、せっかくだからインタレースの指定ができる方がうれしい。CompressImage()にはそういうオプション的な機能はついていないから、別のルーチンを使うしかない。ヘッダファイルやドキュメントをいろいろ探してみたところ、ImageCodecRequestSettings()という関数を発見。FindCodec()でCompressor Componentを得てOpenComponent()で開き、そのComponent Instanceに関してオプションを設定できるらしい。これは使えそうだ。
 が、設定を変更した後にどう使うのかわからない。圧縮関係のルーチンにはComponent Instanceを使用するものは見つからず、途方に暮れる。と、Standard-Dialog Componentというのを発見してこれでいけるのかと思ったが、こちらは圧縮の方法(JPEGとかPNGとか)を選ぶだけで細かい設定はできない。
 QuickTimeのドキュメントが古いからそれで載っていないのかとWebをあたると、FCompressImage()の説明に、「codecパラメータにはComponent Instanceを指定できる」と書かれているのを発見。おお、これか!

 そんなわけで、FindCodec()→OpenComponent()→ImageCodecRequestSettings()→FCompressImage()の流れで設定が可能だということがわかった。実際には別のところで設定しておくわけだから、RequestSettings()ではなくてGetSettings()とSetSettings()を使う。引数はHandleと書かれているが、実際にはQTAtomContainerらしいからQTAtom関係の関数を使えば設定を取得・変更することが可能だ。
 それから、なぜかPNGの設定ダイアログではポップアップメニューになるはずのところがチェックボックスになってしまって使用できなかったことも一応付記しておく。QuickTimeのバグかも知れないが、他の環境でも再現するのかどうかわからないのでなんともいえない。
 あ、そうだ。もうひとつ気になることがあった。GWorldの色深度を16ビットにした時、PNGで圧縮した後の画像が24ビットの時よりも大きくなってしまった。理由はよくわからないが、GWorldの16ビットというのがMac用の特殊な(?)フォーマットであることが原因なのかな。とりあえずこれについては、24ビットの画像を16ビットでPNG化することによって解決。ふう。

 最近妙にDMがたくさん届くようになった。ほとんどがバナー広告関係だが、中には某大学の名誉博士号を授与なんてものも。こんなメールをもらってどうしろというのかさっぱりわからないが、授与対象者に「本学の発展に十分な実績のある方(寄付、寄進など)」とかいうのがある。金を出せばokってこと?(汗)
 にしても「ご興味のない皆様に届いた場合は、心よりお詫び申し上げます」って、おわびするくらいなら最初から送るなっての。しかも同じ内容で何度も送ってきたりするし。どうせならもう少し面白みのある内容にしてくれたらいいのに(笑)。

to August 6, 1999 ↑ to August index → to August 12, 1999