Я заметил в примере кода Apple, что они часто предоставляют значение 0 в параметре bytesPerRow в CGBitmapContextCreate. Например, это происходит из примера проекта Reflection .
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 должно быть «Количество байтов памяти, используемое на строку растрового изображения».
Так в чем же дело? Когда я могу поставить ноль и когда я должен рассчитать точное значение? Есть ли какие-либо последствия для производительности, если это сделать так или иначе?