我在使用 libjpeg-turbo 时遇到了一些奇怪的问题,特别是我有一个 1920x1080 rgba 缓冲区,我正在通过 mmap 读取它(所以它是只读的),我试图将其编码为 jpeg,但我只想对左上角进行编码,例如 320x568 像素(以及其他一些尺寸)。memcpying 那些我试图避免的像素会产生一些开销,所以我试图将 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 行左右看起来是正确的,然后其余的都是垃圾。有谁知道为什么这不起作用?