如何在c中减少或增加像素级图像的大小

时间:2015-01-24 07:07:18

标签: c bmp

颜色数据只是颜色数据,不包含标题。运行我的代码后,新尺寸的图片仅显示黑色像素,底部显示一些随机的深色。尺寸,宽度和高度都很好,但颜色。

//code to change to bigger image
int r, c, i, j;
for (r = 0; r < height; r++)
{
    for (c = 0; c < width*3; c++)
    {
        for (i = 0; i < 2; i++)
        {
            for (j = 0; j < 2; j++)
            {
                if (j == 0)
                {
                    bigColorData[2*r+i][c] = oldColorData[r][c];
                }
                else
                {
                    bigColorData[2*r+i][2*c+2] = oldColorData[r][c];
                }
            }
        }
    }
}

1 个答案:

答案 0 :(得分:0)

c < width*3我推断出你正在使用3像素每像素像素(24位颜色)。

但是这不起作用,因为扫描线(宽度)向上舍入到最近的单词,所以循环必须是:

int bits= 3*8;
int scanlinesize= ((bits + 31) / 32 * 4);
unsigned char *pix, *scanline= begin_of_image_data;

for (r = 0; r < height; r++, scanline += scanlinesize)
{
    pix= scanline;
    for (c = 0; c < width; c++, pix += 3)
    {
         // now pix points to the first byte of the pixel