C 分辨率为300x300的jpeg到bmp输出失真的灰度图像

C 分辨率为300x300的jpeg到bmp输出失真的灰度图像,c,image,bitmap,jpeg,libjpeg,C,Image,Bitmap,Jpeg,Libjpeg,我在Ubuntu 14.04环境中使用libjpeg解压我的JPEG图像并将其写入BMP文件。但是,如果我有一个分辨率为300x300(2550x4206像素)的彩色JPEG图像,输出的BMP文件是灰度的,图像看起来很暗。其他分辨率为200x200、400x400和600x600的JPEG图像将输出正确的BMP图像。我需要你的建议。请帮忙。多谢各位 链接到JPEG图像: BMP的预览不可用。在Ubuntu或Linux环境系统中下载并查看图像。我不知道为什么它不在谷歌甚至Windows中显示图像

我在Ubuntu 14.04环境中使用libjpeg解压我的JPEG图像并将其写入BMP文件。但是,如果我有一个分辨率为300x300(2550x4206像素)的彩色JPEG图像,输出的BMP文件是灰度的,图像看起来很暗。其他分辨率为200x200、400x400和600x600的JPEG图像将输出正确的BMP图像。我需要你的建议。请帮忙。多谢各位

链接到JPEG图像:

BMP的预览不可用。在Ubuntu或Linux环境系统中下载并查看图像。我不知道为什么它不在谷歌甚至Windows中显示图像

链接到输出BMP图像:

将解压缩的JPEG图像写入BMP文件的代码段:

struct jpeg_decompress_struct cinfo;
unsigned int bytesPerRow = cinfo.output_width * cinfo.num_components;
unsigned int colColor;
FILE *bmpFile = NULL;

while (cinfo.output_scanline < cinfo.image_height) {

    JSAMPROW row_pointer[1];
    row_pointer[0] = raw_image
            + cinfo.output_scanline * bytesPerRow;
    jpeg_read_scanlines(&cinfo, row_pointer, 1);
    for (colColor = 0; colColor < cinfo.image_width; colColor++) {

        /* BMP scanlines should be aligned at 4-byte boundary */

    }

    /* write each row to bmp file */
    fwrite(row_pointer[0], 1, bytesPerRow, bmpFile);
}

我从@user3629249那里得到了答案。非常感谢。 仅当分辨率为300x300时,我才在每行末尾添加了2个字节的填充

padding = 0;
fwrite(&padding, 2, 1, bmpFile);

我从@user3629249那里得到了答案。非常感谢。 仅当分辨率为300x300时,我才在每行末尾添加了2个字节的填充

padding = 0;
fwrite(&padding, 2, 1, bmpFile);

到输出图像的链接失败,即使使用谷歌像素编辑器之一,也请重新发布图像或更正linkvoid_ptr添加的代码片段,以便将解压缩的JPEG写入BMP文件@用户3629249下载该文件并尝试在Ubuntu或Linux环境中查看该文件。我不知道为什么它不能在Google甚至Windows中显示图像:(a.bmp文件字段必须采用正确的“endian”格式。这通常意味着字段必须逐字节设置。行的宽度必须是4字节长的倍数。假设图像设置为:2550像素,24位(3字节)每像素,生成的行宽度将不是4的倍数。因此,`for(iCount-…)循环需要更智能,以允许尾部填充字符(如果有)这需要在每行的末尾是的,我逐字节设置了.bmp文件字段。我是否只在每行的末尾添加1个字节?到输出图像的链接失败,即使使用谷歌像素编辑器之一,请重新发布图像或更正linkvoid_ptr添加的代码段,以便将解压缩的JPEG写入bmp文件。@user3629249 Download文件,并尝试在Ubuntu或Linux环境中查看该文件。我不知道为什么它不在Google甚至Windows中显示该图像:(a.bmp文件字段必须采用正确的“endian”格式。这通常意味着字段必须逐字节设置。行的宽度必须是4字节长的倍数。假设图像设置为:2550像素,每像素24位(3字节),则生成的行宽度将不会是4的倍数。因此,`for(iCount-…)循环需要变得更智能,以允许需要在每行末尾的尾随填充字符(如果有)是的,我逐字节设置.bmp文件字段。我是否只在每行末尾添加1个字节?