画像を扱うアプリケーションを開発していると、JPEG画像ファイルをオープンし、それをAdobe Photoshopの画像ファイル形式で保存したいといったケースに遭遇します。こうした時、画像ファイルフォーマットを自分で解析したり、一からJPEG圧縮の伸張ルーチンを作成していたのでは、大きな労力が必要になります。そうした問題を回避するために、QuickTimeにはGraphics ImpoterとExpoterという便利なルーチン群が用意されています。
最初のloadOffScreen()は、指定されたFSSpec(ファイル保存場所を含んだ構造体)で指定された画像ファイルをオープンし、それをNewGWorld()で確保したGWorld(オフスクリーンバッファ)に描画し保存するルーチンです。次のsaveOffScreen()が、引数で渡されたGWorldに描画されている画像を、同じく引数で渡されたFSSpecのファイルへ指定タイプと圧縮率(OSTypeとCodecQ)で保存するルーチンです。圧縮率はゼロから0x400(16進数)までを選択でき、JPEGファイルならば0x200で中間の圧縮率となります。こうした設定は、圧縮を必要としないファイルタイプの場合には無視されます。


両ルーチンで実行している LockPixels()は、GWorldのPixMap画像バッファ(Handleとして確保されている)をロックします。この処理は、GWorldのその後の取り扱いによっては必要ない場合もあります。とりわけ、saveOffScreen()の方の LockPixels()とUnlockPixels()は必要無い可能性がありますが、とりあえず安全策として実行しています。またExporterには、圧縮率や画像に関するオプションを設定するためのダイアログを表示する仕組みも別途用意されています。
Graphics ImporterとExporter関連するUnversal Interfacesは、Compornents.hとImageCompression.hです。Graphics ImportersとExportersに関するサンプルソースコードを参照したい方は、以下のサイトをチェックしてみてください。
http://developer.apple.com/samplecode/Sample_Code/QuickTime/Importers_and_Exporters.htm
また、QuickTime全般に関する様々なPDFドキュメントは以下のサイトでチェックでき、Graphics ImportersとExportersに関するドキュメントも、ここで参照することができます。
http://developer.apple.com/techpubs/quicktime/qtdevdocs/RM/newsframe.htm
copyright 2002 Ottimo, Inc. All rights reserved
無断転載・引用禁止
Contact Us: koike@ottimo.co.jp