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;
}
}
}
}
이 올바른 그라데이션 생산 : 내가 할 무엇
: 나는 만약 내가 얻을 문을 제거하면
을 이런 문제를 피하기 위해 비트 맵에 대해 알아야합니까?
랜덤 추측이지만 '10'은 개행 문자 ('\ n')입니다. 바이너리가 아닌 텍스트 모드로 출력 파일을 여는 것이 있습니까? 그렇다면'10 '을'\ r \ n '시퀀스로 대체 할 수 있습니다. –
@RogerRowland : 확실히 여기에 문제가 있습니다! –
그게 전부입니다. * stride *를 무시하면 그의 다음 문제가됩니다. –