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;
}
}
}
}
這會產生一個正確的梯度:
當我刪除if語句,我得到:
什麼我需要了解位圖以避免這樣的問題?
隨機猜測,但'10'是一個換行符('\ n') - 你是否有機會以文本模式打開你的輸出文件而不是二進制文件?如果是這樣,它可能會用'\ r \ n'序列替換每個'10'。 –
@RogerRowland:這絕對是這裏的問題! –
就是這樣。忽視*步伐*將是他的下一個問題。 –