2011-07-06 3 views
0

저는 디지털 이미지 프로세스를 가르치려고합니다. 구조체에 pgm을 읽었습니다. 이 구조체에는 픽셀 배열이 있습니다. 나는 그것을 잘 인쇄 할 수있다. 이제 사용자 입력을 기반으로이 사진을 자르고 싶습니다. 나는이 입력을 받아 입력 된 좌표를 기반으로 검정 직사각형을 얻습니다. 내가 뭘 잘못하고 있니?C에서 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); 
+0

http://sscce.org/ –

+1

'k' 변수는 증가하지 않습니다. – Delimitry

답변

1

k을 늘리는 것을 잊어 버리고 있습니다. 당신은 또한 당신의 루프는 다음과 같이되고 싶어 : 당신은 실제로 당신이 원하는 사각형, 그리고 적절한 폭과 높이의 바로 왼쪽 사각형을 잘라

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

있도록.

+0

밤잠을 지어 줘서 고마워. 나는 그 증분을 가지고 있을지도 모른다. –