6

次のように8ビットのグレースケールコンテキストを作成しようとしています:

CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceGray();
CGContextRef context = CGBitmapContextCreate(
    data, m_width, m_height, 8, m_width, colorSpace, 
    kCGBitmapByteOrder32Little|kCGImageAlphaNone);

しかし、私は次のエラーがあります:

CGBitmapContextCreate: unsupported parameter combination: 
8 integer bits/component; 8 bits/pixel; 1-component color space; 
kCGImageAlphaNone; 1936 bytes/row.

この組み合わせがサポートされていないのはなぜですか?

4

2 に答える 2

8

サポートされているコンポーネントあたりのビット数、ピクセルあたりのビット数、色空間の組み合わせについては、「Quartz 2D プログラミング ガイド」を参照してください。

Nikolai が書いたように、kCGImageAlphaNone で kCGBitmapByteOrder32Little を使用しても、灰色の色空間では意味がありません (サポートされていません)。

CGBitmapContextCreate行ごとのバイト数と高さに応じて、データ パラメータに十分なメモリを割り当てる必要があります。高さを設定してデータにメモリを割り当てたコードは表示されませんでしたが、問題があると思います。

また、実際にメモリを自分で割り当てる必要はありません (iOS 4.0 以降) 。CGBitmapContextCreate のドキュメントによると、データとして NULL を渡してメモリを割り当てることができます。で要求することにより、後でデータ ポインターにアクセスできますCGBitmapContextGetData

もう 1 つの注意点は、この場合 (1 ピクセルあたり 1 バイトのグレー色空間) の場合のみm_widthasを渡すのが正しいことですが、おそらく良い方法ではありません。bytesPerRowデータに NULL を渡す場合は、ここに 0 を渡して自動的に計算させることもできます。

于 2013-10-13T12:39:02.473 に答える
2

それはおそらくkCGBitmapByteOrder32Littleです(シングルチャンネルのグレースケール画像には意味がありません)。

ピクセル形式の仕様からそれを削除できます。

于 2013-08-05T12:23:32.450 に答える