최근에는 메모리에 비 압축 비트 맵을 표시하는 데 관심이있었습니다. 그러나 올바르게 구현하는 방법을 모르는 한 가지는 바이너리 투명성입니다. 예, 나는 이런 식으로 시작 : 이진 투명도를 나타내는 방법은 무엇입니까?
struct RGBPixel {
uint8_t red;
uint8_t green;
uint8_t blue;
};
struct bitmap {
struct RGBPixel *data;
size_t width;
size_t height;
size_t bytesPerPixel;
size_t bytewidth;
/* etc. */
};
내가 가장 간단한 방법이 될 것입니다 가정 :
struct RGBPixel {
uint8_t red;
uint8_t green;
uint8_t blue;
bool transparent;
};
을하지만 그건 조금 낭비 것 (당신은뿐만 아니라 전체 알파 채널을 추가 할 수 있습니다) . 내가 생각할 수있는 유일한 다른 가능성은 색상 중 하나를 투명하게 유지하지만 그 색상을 표시하는 기능을 잃어 버리는 것입니다. 이것을하기위한 표준 방법이 있습니까?
일반적인 형식 (GIF, 8 비트 PNG 등)은 어떻게 나타 납니까?
"그냥 사용되지 않는 하나를 선택하여 투명도 색상으로 만드십시오." 하지만이 색을 어떻게 선택해야합니까? 이미지를 반복하여 사용하지 않을 때까지 색상을 추측 해 둡니다. – Sam
사용하지 않을 것으로 생각되는 색상부터 시작하십시오. Loop Through를 사용한다면, 픽스맵을 사용하여 오프셋을 기억하고, 색상을 약간 변경하고 (아마도 B 값을 증가시키고, G를 R로 적당히 굴림) 픽스맵의 끝까지 반복하고 시작합니다. 다시 시작하면이 색을 찾지 못하면 그 색이됩니다. 그렇지 않으면 반복하십시오. 더 나은 코너 케이스 성능을 위해서는 처음에는 사용하지 않을 256 색을 선택하고 동시에 검색하십시오. 사용중인 모든 것을 찾을 확률은 4MP 이미지에서 1/4^256 또는 1e25에 약 1입니다. –