高度な検索
Developer Connection
Member Login ログイン | ご入会 ADC連絡先

Technical Q&A QD63
Finding the bit depth of a Carbon Printing Manager graphics context



Q: 開発中のアプリケーションは、PMSessionGetGraphicsContext を呼び出して QuickDraw GrafPort を取得し、その中への描画を行います。GrafPort が検出された場合、私は SInt16 depth = GetPixDepth( GetPortPixMap( grafPtr ) ) を呼び出して色数を判断しようとするのですが、結果の色数は常に 0 になってしまいます。どこに問題があるのでしょうか。

A: GetPortPixMap は、GrafPtr ではなく、CGrafPtr とともに動作するように設計されているため、GetPortPixMap に GrafPtr を渡すと、常に NULL が返されます。したがって、NULL が渡されるため、GetPixDepth もゼロを返すことになります。ただし、モノクロで印刷を行っている場合、PMSessionGetGraphicsContext から得られるグラフィックスコンテキストは GrafPtr であってもかまいません。アプリケーションがグラフィックスコンテキストの色数を検出する必要がある場合は、リスト 1 に示すコードを使用してください。

リスト 1 GrafPort の色数の計算

    SInt16 depth;
    PixMapHandle pmH = GetPortPixMap( grafPtr );
    if ( pmH != NULL ) {
    
             /* CGrafPtr として処理する */
        depth = GetPixDepth( pmH );
        
    } else {
    
            /* GrafPtr として処理する */
        depth = 1;
        
    }
                           




更新日: 2000 年 11 月 8 日

Choose your language: