像素矩阵如何缩放

时间:2013-11-07 13:34:54

标签: c

我正在做一个sierpinski的地毯程序,我设法从矩阵创建一个PGM图像。我首先创建一个char **矩阵,其中包含#或''。#= white color,'= = black color,and然后我为黑色和白色创建一个值为0或255的int **像素,非常简单。矩阵大小等于sierpinski地毯的迭代次数:对于算法的3次迭代,我得到27乘27像素的结果矩阵(因此图像)。如何将此矩阵相乘以放大所得到的图像,但保持相同的图像。对于每个像素,我希望它在输出图像中为4像素。 C程序。

EDIT:用于从像素值矩阵打印PGM图像的代码

void print(char fout[30],int **pixels,int width,int height){

int i,j;
FILE *f = fopen(fout,"w");
fprintf(f,"%s\n","P2");
fprintf(f,"%d %d\n",width,height);
fprintf(f,"%d\n",255);
for(i=height-1;i>=0;i--){
        for(j=0;j<width;j++){
                fprintf(f,"%d ",pixels[i][j]);
        }
        fprintf(f,"\n");
}

fclose(f);

}

用于创建像素值矩阵的代码

for(i=0;i<size;i++)
    for(j=0;j<size;j++)
        if(basegrid[i][j] == ' ')
            pixels[i][j]=0;
        else
            pixels[i][j]=255;

1 个答案:

答案 0 :(得分:1)

首先你可以创建一个更大的矩阵(大小:大小* 2大小* 2),然后根据你最初的像素填充它。

这样的事情应该有效:

int main()
{
    int **pixels;
    int size;
    int **enlarged;

    int idx;
    enlarged = malloc(2 * size * sizeof(int *));
    for(idx = 0; idx != size; ++idx)
    {
        enlarged[idx] = malloc(2 * size * sizeof(int));
    }

    int row;
    int col;
    for(row = 0; row != size; ++row)
    {
        for(col = 0; col != size; ++col)
        {
            enlarged[row * 2][col * 2] = pixels[row][col];
            enlarged[row * 2 + 1][col * 2] = pixels[row][col];
            enlarged[row * 2][col * 2 + 1] = pixels[row][col];
            enlarged[row * 2 + 1][col * 2 + 1] = pixels[row][col];
        }
    }
}

请注意,我省略了读取大小和填充像素的代码。

希望这有帮助。