我使用libjpeg-turbo时遇到了一些奇怪的问题,特别是我有一个1920x1080的rgba缓冲区,我通过mmap阅读(所以它只读)我是尝试编码为jpeg,但我只想编码左上角,例如320x568像素(以及其他一些尺寸)。记忆那些我试图避免的像素会产生一些开销,所以我试图将cinfo中的宽度和高度设置为320x568,然后手动传递给jpeg_write_scanlines只有相应的行。
这是一张显示我的意思的图片:http://i.imgur.com/lKwkjZS.png
我的希望是它将从1920x1080缓冲区传递的仅568行中的每一行的前320个像素。
JSAMPROW row_pointer[1];
int row_stride = 1920 * bpp;
while (cinfo.next_scanline < cinfo.image_height) {
row_pointer[0] = &in[cinfo.next_scanline * row_stride];
jpeg_write_scanlines(&cinfo, row_pointer, 1);
}
所以我将jpeg压缩设置为320x568并将其传递给1920x1080缓冲区,然后告诉它具体跳过指针1920x4bpp的每一行。
虽然它只有一半可以工作,但是我得到的图像看起来正确的第一行~94行左右,然后剩下的就是垃圾了。有谁知道为什么这不起作用?