0

我正在做一个 sierpinski 的地毯程序,我设法从矩阵创建 PGM 图像。我首先创建一个具有 # 或 ' ' .# = 白色,' ' = 黑色的 char **matrix,然后我创建一个 int **pixels,黑色和白色的值为 0 或 255,非常简单。矩阵大小等于 sierpinski 地毯的迭代次数:对于算法的 3 次迭代,我得到 27 x 27 像素的结果矩阵(所以图像)。我怎样才能乘以这个矩阵以放大结果图片但保持相同的图像。对于每个像素,我希望它在输出图像中是 4 个像素。C 程序。

编辑:用于从像素值矩阵打印 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;
4

1 回答 1

1

首先,您可以创建一个更大的矩阵(大小:大小 * 2 x 大小 * 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];
        }
    }
}

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

希望这可以帮助。

于 2013-11-07T14:26:23.393 回答