2017-12-14 26 views
1

BMP 파일의 비트 맵을 M 인수로 다운 샘플링하려고합니다. 나는 앨리어싱없이 이미지를 알아 내고 싶다. 그래서 그것을 달성하기 위해 나는이 방법으로 MXM 픽셀의 평균을 계산 : 나는 단지 광장에서 proprely 평균을 계산하기 때문에 비 제곱 이미지 크기를 조정하려고 할 때비트 맵의 ​​크기를 올바르게 조정할 수 있습니까?

Resize in good way

문제는 apears. 예를 들어 최종 이미지가 300x150 인 경우 평균은 150x150 픽셀입니다. 나는 한 경우 previous_mean -> 이것은 내가 실제로 그것을 계산하는 방법이다 new_mean = (previous_mean+value)/2

:

for (i = 0; i < new_height; i++) { 
for (j = 0; j < new_width; j++) { 
    mean.r = bitmap[i*factor][j*factor].r; 
    mean.g = bitmap[i*factor][j*factor].g; 
    mean.b = bitmap[i*factor][j*factor].b; 
    for(k = i*factor; (k < i*factor+factor)&&(k<old_height); k++){ 
    for(l = j*factor; (l < j*factor+factor)&&(l<old_width); l++){ 
     mean.r = (mean.r + bitmap[k][l].r)/2; 
     mean.g = (mean.g + bitmap[k][l].g)/2; 
     mean.b = (mean.b + bitmap[k][l].b)/2; 
    } 
    } 
    new_bitmap[i][j] = mean; 
    mean.r = 0; 
    mean.g = 0; 
    mean.b = 0; 
} 

}

new_bitmapbitmapPIXELS의 2 차원 배열이며, PIXELS 인 :

typedef struct __attribute__((__packed__)){ 
    unsigned char b; 
    unsigned char g; 
    unsigned char r; 
} PIXELS; 
+0

Google "쌍 선형 보간법". 더 나은 결과를 얻으려면 bicubic 또는 Lanczos를 시도하십시오. –

+2

'mean.r = (mean.r + bitmap [k] [l] .r)/2;가 아니라'sum.r + = bitmap [k] [l] .r; n ++; .... mean.r = sum.r/n; ' – chux

+0

왜 2로 나눈거야? –

답변

0

이것은 절대적으로 정확합니다. old_width를 이전 버전으로 대체했습니다. _heigth.