在C中裁剪PGM
我试着自学数字图像处理。我已将我的pgm读入结构。在这个结构中,我有像素阵列。我可以很好地打印出来。现在我想根据用户输入裁剪这张照片。我接受这些输入,根据输入的坐标得到一个黑色矩形。我做错了什么在C中裁剪PGM,c,image-processing,pgm,C,Image Processing,Pgm,我试着自学数字图像处理。我已将我的pgm读入结构。在这个结构中,我有像素阵列。我可以很好地打印出来。现在我想根据用户输入裁剪这张照片。我接受这些输入,根据输入的坐标得到一个黑色矩形。我做错了什么 int temp, y1, y2, x1, x2, wide, high; printf("Please Enter x1 y1 x2 y2"); scanf("%i %i %i %i", &x1, &y1, &x2, &y2); if(y1> y2) {
int temp, y1, y2, x1, x2, wide, high;
printf("Please Enter x1 y1 x2 y2");
scanf("%i %i %i %i", &x1, &y1, &x2, &y2);
if(y1> y2)
{
temp = y1;
y1 = y2;
y2 = temp;
}
if(x1> x2)
{
temp = x1;
x1 = x2;
x2 = temp;
}
wide = x2-x1+1;
high = y2-y1+1;
fprintf(outstream, "%2s\n%i %i\n%i\n", header->filetype, wide, high,header->maxgray);
pixel image[header->height][header->width];
pixel *pix = malloc((wide*high) *sizeof(char));
int a = 0;
for(int b= 0; b<header->height; ++b)
{
for(int c=0; c<header->width; ++c)
{
image[b][c] = header->p[a];
++a;
}
}
int k = 0;
for(int i = 0; i< high; ++i)
{
for(int j = 0; j<wide; ++j)
{
pix[k]=image[i][j];
}
}
fwrite(pix, 1, (wide*high) * sizeof(pixel), outstream);
int-temp,y1,y2,x1,x2,宽,高;
printf(“请输入x1 y1 x2 y2”);
scanf(“%i%i%i%i”、&x1、&y1、&x2和&y2);
如果(y1>y2)
{
温度=y1;
y1=y2;
y2=温度;
}
如果(x1>x2)
{
温度=x1;
x1=x2;
x2=温度;
}
宽=x2-x1+1;
高=y2-y1+1;
fprintf(超出流,“%2s\n%i%i\n%i\n”,标题->文件类型,宽,高,标题->最大灰色);
像素图像[标题->高度][标题->宽度];
像素*pix=malloc((宽*高)*sizeof(字符));
int a=0;
对于(整数b=0;bHweight;++b)
{
对于(int c=0;cwidth;++c)
{
图像[b][c]=标题->p[a];
++a;
}
}
int k=0;
对于(int i=0;i 对于(int j=0;j您忘记了递增k
。您还希望您的循环如下:
for(int i = y1; i <= y2; ++i )
{
for( int j = x1; j <= x2; ++j )
{
pix[k] = image[i][j]
++k;
}
}
for(int i=y1;i)的k
var没有增加。感谢您,经过一夜的睡眠,我可能已经得到了增量,但我永远不会得到循环。