2017-09-17 10 views
0

CGBitmapContext constructor(s)を使用してXamarin.iOSプロジェクトで空のビットマップを作成しようとしています。しかし、私がしようと関係なく、どのような私は、エラーに"System.Exception: Invalid parameters to context creation"CGBitmapContextコンストラクタで無効なパラメータ

例コードを取得:

const int width = 100; 
const int height = 100; 
const int bytesPerPixel = 4; 
const int bitsPerComponent = 8; 
var intBytes = width * height * bytesPerPixel; 
byte[] pixelData = new byte[intBytes]; 
var colourSpace = CGColorSpace.CreateDeviceRGB(); 
using (var objContext = new CGBitmapContext(pixelData, width, height, bitsPerComponent, width * bytesPerPixel, colourSpace, CGBitmapFlags.ByteOrderDefault)) 
{ 
    // ... 
} 

私はほとんどのパラメータを変更しようとしたが、データブロックを修正してIntPtrとして渡しました。私はシステムがデータを割り当てるように、最初のパラメータとしてnullを使ってみました。私は最後のパラメータでさまざまなフラグを試しました。私はいつも同じエラーを受けます。どのパラメータが間違っていますか?実行するために上記のコードで何を変更する必要がありますか?

答えて

1

CGBitmapFlags.ByteOrderDefaultからCGBitmapFlags.PremultipliedLastに最後のパラメータが変更され、エラーが表示されなくなりました。リンクは

述べたよう

CGBitmapFlags Enumeration

を参照してこの列挙は、ビットマップ内のコンポーネントのデータのレイアウト情報を指定します。

この列挙は、データのインメモリ構成を決定し、アルファチャンネルが存在するかどうか、およびコンポーネントの値が事前に乗算されているかどうかをカラーモデルで示します。

私はデータ情報、特にカラーモデルと一致するように対応するフラグを選択する必要があると思います。

同じ理由で、CreateDeviceCmykを選択すると、CGBitmapFlags.Noneが適切です。

+0

本当にありがとうございました。私は、ColorSpaceがバイトの配置を決定したことに気づいていませんでした –

関連する問題