В этом CGBitmapContextCreate,почему bytesPerRow 0?

Я заметил в примере кода 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 должно быть «Количество байтов памяти, используемое на строку растрового изображения».

Так в чем же дело? Когда я могу поставить ноль и когда я должен рассчитать точное значение? Есть ли какие-либо последствия для производительности, если это сделать так или иначе?

5
задан Greg W 23 June 2011 в 15:39
поделиться