Ответ 1
Система любит, чтобы изображения были кратными 64 байтам в строке, предположительно для лучшей производительности из-за выравнивания строки в кеше. 1200 не кратно 64, но 1216.
Я конвертирую изображения в файл MOV, и со мной случилось что-то интересное. Я записал свои биты на цветной компонент, бит на пиксель и байты на строку. Здесь мой код:
NSLog(@"Image width: %d, Height: %d", CGImageGetWidth(image), CGImageGetHeight(image));
NSLog(@"BPC: %d \ BPP: %d \ ByPR: %d", CGImageGetBitsPerComponent(image), CGImageGetBitsPerPixel(image), CGImageGetBytesPerRow(image));
Здесь мой вывод:
Ширина изображения: 300, Высота: 300 (все как ожидалось) BPC: 8 (8 бит на цвет... пока что так хорошо) BPP: 32 (32 = 4 компонента ARGB * 8 бит на цвет... получили) ByPR: 1216 (300 пикселей на строку * 4 байта на пиксель = 1200 байт за строку)
Почему я регистрировал 1216 байт в строке, а не 1200? Кстати, это не просто случайность. Когда я создаю видео на основе этих чисел для размеров буфера, он работает. Когда я создаю его с 1200 байтами в строке, я получаю некоторый испорченный эффект сглаживания.
Мысли?!
Система любит, чтобы изображения были кратными 64 байтам в строке, предположительно для лучшей производительности из-за выравнивания строки в кеше. 1200 не кратно 64, но 1216.