2015-01-24 6 views
0

색상 데이터는 색상 데이터로, 헤더는 포함되지 않습니다. 코드를 실행 한 후 새 크기의 사진은 검정색 픽셀 만 표시하고 아래쪽에는 어두운 색상이 약간 나타납니다. 크기, 너비 및 높이 모두 좋은 색상이지만.픽셀 단위로 이미지 크기를 줄이거 나 늘리는 방법

//code to change to bigger image 
int r, c, i, j; 
for (r = 0; r < height; r++) 
{ 
    for (c = 0; c < width*3; c++) 
    { 
     for (i = 0; i < 2; i++) 
     { 
      for (j = 0; j < 2; j++) 
      { 
       if (j == 0) 
       { 
        bigColorData[2*r+i][c] = oldColorData[r][c]; 
       } 
       else 
       { 
        bigColorData[2*r+i][2*c+2] = oldColorData[r][c]; 
       } 
      } 
     } 
    } 
} 
+0

말 그대로 픽셀 배로 24 비트 컬러 이미지를있어 가정하면, 'c' 루프 조건 대 증가 문을 살펴보고 내부 루프의 배열 인덱스를 직접 손으로 연구하여 그들이 기대하는 바를 수행하는지 확인하십시오. –

+1

어떻게 출력을보고 있습니까? 새 bmp 파일을 만드시겠습니까? 또한 'i'와 'j'루프는 제거해야합니다. 4 개의 픽셀을 설정하려면'c' 루프에 4 줄의 코드를 넣으십시오. – user3386109

+0

bigColorData 및 oldColorData의 정의를 제공하십시오. 또한이 배열을 비트 맵에서 초기화/변환하는 방법을 보여주십시오. –

답변

0

c < width*3에서 나는 픽셀 당 3 바이트 픽셀 (24 비트 컬러)로 작업하고 있다고 추론합니다.

그러나 이것은 (폭) 가장 가까운 단어로 반올림하는 주사선으로 작동하지 않습니다, 그래서 루프가 있어야합니다 :

int bits= 3*8; 
int scanlinesize= ((bits + 31)/32 * 4); 
unsigned char *pix, *scanline= begin_of_image_data; 

for (r = 0; r < height; r++, scanline += scanlinesize) 
{ 
    pix= scanline; 
    for (c = 0; c < width; c++, pix += 3) 
    { 
     // now pix points to the first byte of the pixel 
관련 문제