前回はDrag Managerについて代用APIを調査してみましたが、前回の例題と同じような状況はCarbon Frameworkの広範囲に及んでいます。今回は、QuickDrawの引退により絶滅が危惧(笑)されているPicture画像フォーマット(PICT画像)の作成や描画について調査してみます。
なにせ、QuickDrawのほとんどのAPIがDEPRECATED指定されていますので、結局のところPICT画像(PicHandle)の作成や描画をつかさどるAPIもすべてDEPRECATEDです。それに加えて、PictUtils.hで定義されているユーティリティ関連のAPIもすべてDEPRECATED指定となっています。とは言っても、開発者側としてはアプリケーションで利用したいPICTファイルがまだ存在するかもしれません。そのために、Apple社では、QuickDrawの代わりとなるPICT画像表示の手段を用意しています。
そうしたAPIは、ヘッダーファイルのQDPictToCGContext.hに定義されています。全部で以下の7つしかなく、画像データの参照にはPicHandleの代わりにQDPictRefを用います。
QDPictRef QDPictCreateWithProvider( CGDataProviderRef provider );
QDPictRef QDPictCreateWithURL( CFURLRef url );
QDPictRef QDPictRetain( QDPictRef pictRef );
void QDPictRelease( QDPictRef pictRef );
CGRect QDPictGetBounds( QDPictRef pictRef );
void QDPictGetResolution( QDPictRef pictRef,float *xRes,float *yRes );
OSStatus QDPictDrawToCGContext( CGContextRef ctx,CGRect rect,QDPictRef pictRef);
PICT画像のウィンドウへの描画は可能ですが、残念ながらPICT画像を作成するAPIは含まれていません。ただし、QDPictCreateWithProvider()を使えば、ベタの画像データ(ビットマップ)をPICT画像へ変換することは可能です。結論として、PICTファイルを描画する場合には、QDPictCreateWithURL()とQDPictDrawToCGContext()を用いることになります。以下のdrawPICTFile()は、アプリケーションパッケージのResourcesフォルダ内に存在する「Sample.pct」というPICTファイルを読み込み、ウィンドウ上のHIView(CGContextRefで参照)へ描画するためのサンプルルーチンです。

すでに昔話になってしまいましたが、以前は画像サムネイルを作成する時など、以下のようなPICT画像のリサイズルーチンをよく使いました。しかしなんと、この中で使っているAPIでDEPRECATEDでないモノは、QDGetPictureBounds()とGetPortBitMapForCopyBits()だけになってしまいました。とても寂しいことです...(涙)

ちなみに、最新のCoreGraphics APIを利用しなくても、QuickTime APIを利用すれば、PicHandleを入手したり、それをウィンドウに描画することが可能です。これらのAPIはImageCompression.hに定義されています。とりあえず、こうしたAPIはDEPRECATED指定されていません。ただしPicHandleに関しては、それを直接描画するAPIが存在しなくなりますので、一度ファイルに保存してから操作する必要があるでしょう。GetPicture()で得ていたPICTリソースも同様です。ただし、GetPicture()自体がDEPRECATEDですので、代わりにGetResource()を使う必要があります。
最初のサンプルでは、FSSpecで示されたPICTファイルからPicHandleを得ています。もう片方は、FSSpecで示されたPICTファイルの内容をウィンドウに描画するサンプルです。

PICT画像フォーマットは、イメージのみでなく、ある程度のベクトル図形やテキスト、加えてカパタンやラー情報も一緒に含めることができ、プログラマにとっては手軽で便利なフォーマットでした。しかし、Mac OS Xのイメージングモデルは、イメージ、ベクトル図形、テキスト情報の混在画像フォーマットとしてPDFを採用しています。また、イメージのみを表示する場合には、JPEG、TIFF、PNGなどのファイルを用いるのが妥当でしょう。なにせ、Windowsなどの別環境での表示や取り扱いが難しいとなれば、このご時世、切り捨てれらても仕方がないのかもしれません。
今回はPICT画像を取り扱うための代用APIを調査してみました。次回は、代用APIと言うわけではありませんが、文字列操作(表示や作成)に関係するモダンAPIを調べてみたいと思います。
copyright 2006 Ottimo, Inc. All rights reserved
無断転載・引用禁止
Contact us: koike@ottimo.co.jp