最近我一直想在內存中表示未壓縮的位圖。然而,我不確定如何正確實現的一件事是二進制透明。例如,我在開始時是這樣的:如何表示二進制透明度?
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;
};
但似乎有點浪費(你不妨添加一個完整的alpha通道) 。我能想到的唯一的另一種可能性是保留其中一種顏色是透明的,但是然後你失去了顯示該顏色的能力。有沒有一個標準的方法來做到這一點?
常見格式(GIF,8位PNG等)如何表示?
」只是選擇一個不使用的,並使其成爲透明色。「但我該如何挑選這種顏色?在圖像中循環並繼續猜測顏色,直到找到一個未被使用的圖像? – Sam 2009-11-28 18:20:03
從您認爲不會使用的顏色開始。循環使用,如果使用它,記住你所在的像素圖的偏移量,稍微改變顏色(可能增加B值,適當地從G滾動到R),然後循環到像素圖的末尾,然後開始在一開始,如果你沒有找到這種顏色,那就是它。否則,重複。 爲了獲得更好的轉角效果,請選擇您認爲在開始時不會使用的256種顏色並同時進行搜索。找到所有的機會都很低,在4MP圖像中,它是1/4^256或約1e25。 – 2009-11-28 23:06:39