2013-12-08 45 views
0

我正在編寫我自己的位圖生成器在c中,我遇到了一些我無法弄清楚的行爲。寫入位圖24位顏色奇怪行爲

我將像素數據存儲在我寫的像素結構的二維數組中。我將結構直接寫到頭文件後面的文件中。

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; 
      } 
     } 
    } 
} 

這會產生一個正確的梯度:bitmap gradient

當我刪除if語句,我得到:strange bitmap

什麼我需要了解位圖以避免這樣的問題?

+4

隨機猜測,但'10'是一個換行符('\ n') - 你是否有機會以文本模式打開你的輸出文件而不是二進制文件?如果是這樣,它可能會用'\ r \ n'序列替換每個'10'。 –

+0

@RogerRowland:這絕對是這裏的問題! –

+1

就是這樣。忽視*步伐*將是他的下一個問題。 –

回答

1

RogerRowland明白了。當我需要二進制文件時,我正在以文本模式打開我的文件。

+1

你可以接受你自己的答案 –