0

私はデジタル画像処理を独学で学ぼうとしています。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)
{
    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);
4

1 に答える 1

1

をインクリメントするのを忘れていますk。また、ループを次のようにする必要があります。

for(int i = y1; i <= y2; ++i )
{
    for( int j = x1; j <= x2; ++j )
    {
        pix[k] = image[i][j]
        ++k;
    }
}

適切な幅と高さの左上の長方形だけでなく、実際に必要な長方形を切り取るようにします。

于 2011-07-06T03:59:31.943 に答える