● ToolBox API徒然草(2006/11/03)

  このニュースは、MOSAの会員にのみ配布されているデベロッパー向けの
  デジタルマガジンMOSADeNのに掲載された記事です。ほぼ一ヶ月遅れで
  ここに掲載されて行きます

 〜 Carbonモダンアプリケーションへの道(その4) 〜


前回は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