我注意到在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);無效。你不能創建一個沒有alpha通道的位圖上下文。 – PleaseHelp
btw - 如果您查看應用程序的日誌輸出(您可能需要檢查Console.app中的系統日誌),那麼無論何時嘗試創建帶有無效參數的位圖上下文,CGBitmapContextCreate都會打印一條錯誤消息。 – nielsbot