2013-12-08 8 views
0

C에서 자체 비트 맵 생성기를 쓰고 있습니다. 알아낼 수없는 몇 가지 동작이 있습니다.비트 맵 작성 24 비트 색 이상 동작

필자가 작성한 픽셀 구조체의 2D 배열에 픽셀 데이터를 저장합니다. 나는 헤더 뒤에 파일에 직접 구조체를 쓴다.

typedef struct { 
    uint8_t blue; 
    uint8_t green; 
    uint8_t red; 
} pixel_24; 

솔리드 컬러 비트 맵이 올바르게 작동하지만 그라디언트를 만들 때 문제가 발생했습니다. 이미지가 부패했다. 몇 가지 실험을 한 후 r, g 또는 b 값이 10 인 픽셀이 포함 된 이미지가 손상된 것으로 나타났습니다. 나는이처럼 내 색상 채널의 모든 10 년대를 방지하려면 코드를 변경 :

void load_pixels(pixel_24 pixels[VSIZE][HSIZE]) 
{ 
    unsigned int y, x; 

    for (y = 0; y < VSIZE; y++) 
    { 
     for (x = 0; x < HSIZE; x++) 
     { 
      uint8_t b = (x+y)/4; 
      uint8_t g = 255 - (x+y)/4; 
      uint8_t r = 0; 
      pixels[y][x] = (pixel_24) {b, g, r}; 
      if (b==10) 
      { 
       pixels[y][x].blue = 9; 
      } 
      if (g==10) 
      { 
       pixels[y][x].green = 9; 
      } 
      if (r==10) 
      { 
       pixels[y][x].red = 9; 
      } 
     } 
    } 
} 

이 올바른 그라데이션 생산 : 내가 할 무엇 strange bitmap

: 나는 만약 내가 얻을 문을 제거하면 bitmap gradient

을 이런 문제를 피하기 위해 비트 맵에 대해 알아야합니까?

+4

랜덤 추측이지만 '10'은 개행 문자 ('\ n')입니다. 바이너리가 아닌 텍스트 모드로 출력 파일을 여는 것이 있습니까? 그렇다면'10 '을'\ r \ n '시퀀스로 대체 할 수 있습니다. –

+0

@RogerRowland : 확실히 여기에 문제가 있습니다! –

+1

그게 전부입니다. * stride *를 무시하면 그의 다음 문제가됩니다. –

답변

1

RogerRowland있어. 바이너리가 필요할 때 텍스트 모드에서 파일을 열었습니다.

+1

고객님의 답변을 수락 할 수 있습니다. –