Macintosh Developer Online (MDOnline)


2000年9月20日発行号 - MOSAのセミナーはCarbon化



MDOnlineの「創刊号」をリリースしたのが、1999年9月20日でした。まる1年が経過し、今日から2年目に突入します。これも、購読者の皆様、そして配信先の方々のおかげです。この場を借りて、まとめてで申し訳ないのですが、お礼を申し上げます。夏に入ってからは順調に新規購読者数も増えていましたが、なぜか9月の新規申し込みは少し落ち込みそうです。7月8月はけっこうたくさんの方に入会していただきました。現在の読者数は170人ほどになっています。多いか少ないか…まあ、開発やシステム関連人口を考えれば、もっとあってもいいのですが、ある程度の部分では配信先で、特にMacWIREを見ているだけという方も多いでしょう。申込数は200に満たないくらいです。目標では、1年購読者数換算で200は行きたかったのですが、ちょっと足りませんでした。最近は、こういったオンライン情報メディアで儲かっているかどうかみたいなことをよく聞かれます。こういうことをやっていると言えば、必ず聞かれますね。配信先の方々なら上記の数字でだいたい分かると思いますが(笑)、とんとんをやや切るくらいでしょうか。決して黒字ではありません。かといって、大きな赤字でもないというところです。仕事としてはそれなりにまとまった金額が入ってくるという雰囲気でもあるのです。ただ、労力から換算するとやっぱりまだ赤字です。今後これを続けるにはある程度は収支を改善していかないといけないのですが、新規購読者獲得はもちろん、購読の更新をしていただくというが重要だと考えています。特に創刊時にたくさんの方に入っていただいたのですが、その方々の更新の度合いで読者数がぐっと減るという結果にもなります。そのためにもがんばって記事をお届けしないといけないと改めて認識をする次第です。よろしくお願いします。
(新居雅行 msyk@mdonline.jp


【小池邦人のプログラミング日記】2000/9/19<骨までしゃぶろうQuickTime 画像を回転させる>

本当ならば、Mac OS Xパブリックβ版のファーストインプレッションや、Carbon化されたアプリケーションがきちんと起動するかどうかの話しをしたいのですが、残念ながらまだ「物」を入手することができません(涙)。ADC(Apple Developer Connection)メンバー宛には9/18に発送されたそうですので(Appleの話しを信じればですが...)もう少し待つことにいたしましょう。まさかUSAのメンバーだけに発送されたということはないと思いますが、今月中に入手できるかどうか本当に心配です。

そんなわけで、代打としてQuickTimeの「簡単に使え非常に効果が大きい」APIの活用方法を紹介してみたいと思います。今回は「Graphics Importer Components」(以降はGraphics Importerと表記)のAPIを利用し、色々なタイプの画像ファイルをウィンドウに表示するルーチンに挑戦してみます。このルーチンには、画像を90度、-90度、180度回転させて表示するオプションも付けることにします。Graphics Importerに属するAPIは、すべて「ImageCompression.h」に記載されています。また、それらに関するドキュメントは、以下のApple QuickTimeのサイトからダウンロードすることができます。
◇QuickTime 4 Developer Documentation
 http://developer.apple.com/techpubs/quicktime/qtdevdocs/RM/pdfframe.htm

Graphics Importerに関しては、特に「QuickTime 4 Reference for Macintosh and Windows 」に詳しく解説されていますので、ぜひ参考にしてみてください。ダウンロード後のPDFファイル名は「QT4Reference.pdf」となります。

別掲の記事に紹介したrotateImage()が、Graphics Importerを使い画像を回転表示するためのルーチンです。rotateImage()の引数は、画像ファイルの保存場所を示すFSSPecのポインタ(fsc)と、回転タイプを指示するオプションパラメータ(dir)です。dirがゼロならばノーマル表示、1なら90度、-1なら-90度、2ならば180度回転させてから画像をウィンドウに表示します。

まずはGetGraphicsImporterForFile()にFSSpecを渡し、画像タイプに対応したGraphicsImportComponent(gi)をオープンさせます。ここでは画像タイプを意識する必要はありませんが、もし指定されたファイルがGraphics Importerで取り扱えないタイプであれば、この時点でエラーが返されます。QuickTimeでは、バージョンが上がるたびに取り扱い可能な画像タイプが増えていきました。現在ではPICT、JPEG、BMP、GIF、TIFFなどの一般的な画像ファイルだけでなく、Adobe Photoshopのネイティブドキュメント(レイアー付き)やFlashPixファイルなども取り扱い可能です。

続いてGraphicsImportGetNaturalBounds()により画像ファイルの矩形サイズ(drt)を得ます。これを参照してウィンドウの矩形サイズ(wrt)を決定するのですが、画像を90度や-90度回転させる場合には、ウィンドウの縦横サイズを入れ替える必要がありますので注意してください。ウィンドウはCreateNewWindow()で作成し、ShowWindow()の代わりにTransitionWindow()を用いてズーミングアニメーション付きでオープンします。GraphicsImportSetGWorld()では、描画対象となるCGrafPtr(GWorld)をセットします。ここにオープンしたウィンドウのCGrafPtrをセットしておかないと、画像の描画はデスクトップ上になされてしまいます。注意しましょう。dirがゼロで回転をさせない場合には、GraphicsImportSetBoundsRect()で描画矩形領域を指示し、後はGraphicsImportDraw()を呼ぶだけで、オープンしたウィンドウ上に画像が描画されます。最後にCloseComponent()でGraphicsImportComponentを閉じれば、すべての処理は完了します。

dirがゼロ以外ならば90度や180度の回転を行うことになり、描画する時の座標変換用にMatrixRecord(3x3のマトリックス)を用意します。3x3マトリックスで座標値に対して行列式(昔を思い出しましょう!)を実行するわけです。Graphics Importerでは、このマトリックスに色々な値を設定することで、オリジナル画像を移動、拡大、回転、変形させて描画することができます。マトリックスの各要素はFixed(固定小数点)で保存されていますので、まずはLong2Fix()によりlong値をFixed値に変換します。Long2Fix()を含むFixed値の演算や変換ルーチンはすべて「FixMath.h」に定義されていますので参考にしてください。

rotateImage()の内部パラメータとしては、fdが回転角度、cxとcyが回転の中心座標を保持しています。加えて、回転が90度と-90度の場合には、回転後に平行移動で画像原点をウィンドウ原点に合わせる必要がありまので、平行移動用のパラメータをdxとdyに保持します。GraphicsImportGetMatrix()で得た初期マトリックス(mm)にRotateMatrix()で回転用マトリックスを設定します。90度と-90度回転の場合には、TranslateMatrix()で平行移動用マトリックスも追加します。最後に出来上がった3x3マトリックスをGraphicsImportSetMatrix()で戻してやれば準備は完了です。

もちろんrotパラメータを90以外の値にしても問題はありません。ただし、その場合には回転に合わせてウィンドウサイズを大きくする必要があるでしょう。興味ある方は、色々なマトリックスを設定し、画像がどのように表示されるか試してみると面白いでしょう。表示後の画像をスムーズにスクロールさせたり、何らかの編集(フォトレタッチなど)を加える場合には、表示対象をオフスクリンバッファ(オフスクリンGWorld)に設定する工夫が必要です。チャレンジしてみてください。

さて、次回にはMac OS Xパブリックβ版の話しができるのでしょうか?ひょっとしたら、また代打が出るかもしれません。その次もまた...(涙)
[小池邦人/オッティモ]

関連リンク:オッティモ
カテゴリ:QuickTime, 小池邦人のプログラミング日記


Graphics Importerを使い画像を回転表示するためのrotateImage関数

(解説は記事の方を御覧ください)


short rotateImage( FSSpec *fsc,short dir )
{
Fixed fd,cx,cy,dx,dy;
short ret=1;
Rect wrt,drt;
WindowClass wcls;
WindowAttributes watt;
WindowPtr wptr;
CGrafPtr cptr;
long rot;
MatrixRecord mm;
GraphicsImportComponent gi;


GetPort( &cptr );
if( GetGraphicsImporterForFile( fsc,&gi ) )
return( -1 );
if( ! GraphicsImportGetNaturalBounds( gi,&drt ) )
{
OffsetRect( &drt,-drt.left,-drt.top );
if( dir==0 || dir==2 )
wrt=drt;
else
SetRect( &wrt,0,0,drt.bottom,drt.right );
OffsetRect( &wrt,10,50 );
wcls=kDocumentWindowClass;
watt=kWindowCloseBoxAttribute;
if( ! ( ret=CreateNewWindow( wcls,watt,&wrt,&wptr ) ) )
{
TransitionWindow( wptr,kWindowZoomTransitionEffect,kWindowShowTransitionAction,NULL );
GraphicsImportSetGWorld( gi,GetWindowPort( wptr ),0L );
GraphicsImportSetBoundsRect( gi,&drt );
if( dir )
{
GraphicsImportGetMatrix( gi,&mm );
if( dir==1 )
rot=90;
else if( dir==-1 )
rot=-90;
else
rot=180;
fd=Long2Fix( rot );
cx=Long2Fix( (long)drt.right>>1 );
cy=Long2Fix( (long)drt.bottom>>1 );
RotateMatrix( &mm,fd,cx,cy );
if( dir!=2 )
{
dx=Long2Fix( (long)(drt.bottom-drt.right)>>1 );
dy=Long2Fix( (long)(drt.right-drt.bottom)>>1 );
TranslateMatrix( &mm,dx,dy );
}
GraphicsImportSetMatrix( gi,&mm );
}
GraphicsImportDraw( gi );
}
CloseComponent( gi );
}
SetPort( cptr );
return( ret );
}

[小池邦人/オッティモ]

カテゴリ:


Carbonプログラミングをじっくり修得、中野氏によるセミナーが開催

MOSA(Macintosh OS Software Association)の主催で行われるセミナーの“プログラミングキッチン”第2弾として、Dream Garden Softwareの中野洋一氏による「ミニゲームで始めるCarbon初級プログラミング講座」が開催される。募集人員を絞り込み、じっくりと確実にプログラミングが修得できるようにすることを目的としたセミナーであり、ゲーム作成を題材にしてCarbon対応アプリケーションのプログラミングを学習できる。2000年10月13日(金)、11月16日(木)、12月14日(木)のいずれも17:30〜20:30の日程で、東京のエーアンドエー株式会社セミナールームで開催される。実際にマシンを使いながらゲームを制作の実習が行われるが、CodeWarrior Pro5を核にして開発作業はすすめられる。ただし、参加資格として、Macintosh(PowerPC搭載機種)をセミナー会場に持参でき、CodeWarrior Pro 5を所持しているのが条件となる。募集人員は12名で、3回分の参加費用はMOSA会員は27,000円、非会員は33,000円となっている。

関連リンク:ミニゲームで始めるCarbon初級プログラミング講座
カテゴリ:Carbon/CF, イベント


アプリケーションのCarbon化に関するセミナーを開催、小池氏が講師

MDOnlineでは【小池邦人のプログラミング日記】でおなじみの小池氏によるセミナーがMOSA(Macintosh OS Software Association)の主催で行われる。テーマは「MacintoshアプリケーションのCarbon化」であり、MDOnlineの連載で疑問点があれば、直接聞くことができるかもしれない。日時は2000年10月20日(金)の17:15〜20:45で、東京お茶の水の中央大学駿河台記念館360号室で行われる。Mac OS 9でCodeWarriorやResEditを使うといった現状の開発環境でのCarbon対応アプリケーションの開発方法が説明される予定だ。Carbon SDKやソースコードの修正方法、将来展望なども話題にのぼる予定である。参加は40名までで先着順なので、希望者は早く申し込みを行おう。MOSA一般会員は2,000円、学生会員は1,000円、非会員は4,000円の参加費となっている。

関連リンク:http://www.mosa.gr.jp/topics/9jikiden.html
カテゴリ:Carbon/CF, イベント


REALbasci 3.0a8がリリース、コンポーネント関連のバグなどを修正

Mac OS XのCarbonにも対応した開発ツールのREALbasic 3.0が開発中であるが、アルファ版のリリース8が公開されている。IDE関連のバグ修正や、リストボックス、ポップアップメニューでのバグ修正、Windows版ではマウスイベントが正しい順序で発生されなかった点の修正、階層化リストでのアップデートの修正など、コンポーネント関連のバグ修正も多数ある。

関連リンク:REALbasic 3.0a8
カテゴリ:REALbasic


Tech Info Libraryに掲載されたMac OS X Public Betaのマルチメディア関連文書

Tech Info Libraryに現在公開されているMac OS X Public Beta関連の文書のうち、マルチメディア関連のアドレスと要約は以下の通りだ。

◇60748 - Mac OS X Public Beta: Viewing QuickTime TV Channels
 http://til.info.apple.com/techinfo.nsf/artnum/n60748
QuickTime TVチャンネルは、Internet Explorerにあるリンクをクリックしても表示されない。QuickTime PlayerでTVボタンをクリックし、見たいチャンネルをダブルクリックすればよい。

◇58716 - Mac OS X Public Beta: Delay in Opening Web Links From QuickTime Player
 http://til.info.apple.com/techinfo.nsf/artnum/n58716
QuickTime Playerで出てくるリンクをクリックしても、リンク先のオープンに時間がかかる場合がある。このトラブルは将来的には修正される予定である。

◇31248 - Mac OS X Public Beta: Entering QuickTime Pro Registration Key
 http://til.info.apple.com/techinfo.nsf/artnum/n31248
QuickTime Proキーの入力方法が説明されている。System Preferencesアプリケーションでは設定できない。Appsボタンをクリックし、GrabBag→QuickTimeとフォルダをたどりQuickTime Settingsをダブルクリックしてそちらで入力する。

◇106006 - Mac OS X Public Beta: QuickTime Movies May Not Play in the Finder’s Preview Pane
 http://til.info.apple.com/techinfo.nsf/artnum/n106006
UFSボリュームにあるムービは、Finderのプレビュー機能は適用できない。QuickTime Playerで開いて参照する必要がある。HFS Plusボリュームにあるものはプレビューできる。
◇58720 - Mac OS X Public Beta: Audio CD Not Recognized
 http://til.info.apple.com/techinfo.nsf/artnum/n58720
Public Betaを使用中に、オーディオCDを挿入してもデスクトップにマウントされず、また、Music Player(オーディオCDを再生するためのアプリケーション)でも認識できなくなり、また、取り出しもできなくなることがある。その場合には、再起動すればよい。

◇58709 - Mac OS X Public Beta: Music Player Application Does Not Play Audio CD
 http://til.info.apple.com/techinfo.nsf/artnum/n58709
Music Playerを起動後にCDを挿入した場合、CDはマウントされず認識もされないことが発生する場合がある。これに対処する方法は現在のところない。

◇58719 - Mac OS X Public Beta: Sound From Music Player Stops and Starts
 http://til.info.apple.com/techinfo.nsf/artnum/n58719
Classic環境でファイルの保存などをしているときに、再生しているオーディオCDの音が途切れることがある。これは現状では仕方ない。

◇106002 - Mac OS X Public Beta: No Sound in Classic Applications on Power Mac G4 Cube
 http://til.info.apple.com/techinfo.nsf/artnum/n106002
G4 Cubeでは、Classic環境で稼動するアプリケーションからは音が出てこない。これは将来のバージョンで修正される予定である。

関連リンク:TIL Archive
カテゴリ:Knowledge Base(旧TIL), QuickTime, Mac OS X