Appleのサンプルコードでは、CGBitmapContextCreateのbytesPerRowパラメータに値0を指定することがよくあることに気付きました。たとえば、これはReflectionサンプルプロジェクトから出力されます。このCGBitmapContextCreateでは、なぜbytesPerRowは0ですか?
CGContextRef gradientBitmapContext = CGBitmapContextCreate(NULL, pixelsWide, pixelsHigh,
8, 0, colorSpace, kCGImageAlphaNone);
イメージの幅にピクセルあたりのバイト数を乗算するルートが常に存在するため、私にとっては奇妙に思えました。自分のコードにゼロを入れ替えて試してみました。確かに、それはまだ動作します。
size_t bitsPerComponent = 8;
size_t bytesPerPixel = 4;
size_t bytesPerRow = reflectionWidth * bytesPerPixel;
CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB();
CGContextRef context = CGBitmapContextCreate(NULL,
reflectionWidth,
reflectionHeight,
bitsPerComponent,
0, // bytesPerRow ??
colorSpace,
kCGImageAlphaPremultipliedLast);
ドキュメントによれば、bytesPerRow「は、メモリのバイト数はビットマップの行ごとに使用する。」であるべきです
だからこの取引は何ですか?いつ私はゼロを供給することができ、いつ正確な値を計算しなければならないのですか?それを一方的に、あるいは他の方法で行うというパフォーマンス上の影響はありますか?
投稿した例:CGBitmapContextCreate(NULL、pixelsWide、pixelsHigh、8,0、colorSpace、kCGImageAlphaNone);有効じゃない。アルファチャンネルなしでビットマップコンテキストを作成することはできません。 – PleaseHelp
btw - アプリケーションからのログ出力を見ると(Console.appのシステムログをチェックする必要があるかもしれません) 'CGBitmapContextCreate'は、無効なパラメータでビットマップコンテキストを作成しようとすると、エラーメッセージを表示します。 – nielsbot