我正在做一个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;
答案 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];
}
}
}
请注意,我省略了读取大小和填充像素的代码。
希望这有帮助。