Gre*_*g W 5 core-graphics objective-c ios
我在Apple的示例代码中注意到它们通常在CGBitmapContextCreate的bytesPerRow参数中提供值0.例如,这来自Reflection示例项目.
CGContextRef gradientBitmapContext = CGBitmapContextCreate(NULL, pixelsWide, pixelsHigh,
8, 0, colorSpace, kCGImageAlphaNone);
Run Code Online (Sandbox Code Playgroud)
这对我来说似乎很奇怪,因为我总是把图像宽度乘以每个像素的字节数.我尝试将零交换到我自己的代码中并进行测试.果然,它仍然有效.
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);
Run Code Online (Sandbox Code Playgroud)
根据文档,bytesPerRow应该是"每行位图使用的内存字节数".
那么这笔交易是什么?我何时可以提供零,何时必须计算确切的值?以某种方式做到这一点有什么性能影响吗?
我的理解是,如果传入零,它会根据bitsPerComponent和width参数计算每行的字节数.您可能希望在每行字节的末尾添加额外的填充(如果您的设备需要它,或者其他一些约束).在这种情况下,您可以传递一个大于**(每个像素的字节数)的值.我想在现代i/MacOS开发中可能永远不需要这个,除了一些奇怪的边缘情况优化.
| 归档时间: |
|
| 查看次数: |
5385 次 |
| 最近记录: |