Bit Eşlemleri Device-Independent
Cihazdan bağımsız bit eşlem (DIB) bir renk tablosu içerir. Renk tablosu, piksel değerlerinin ışık yayarak üretilen renkleri açıklayan RGB renk değerlerine nasıl karşılık geldiğini açıklar. Bu nedenle, DIB herhangi bir cihazda uygun renk düzenini elde edebilir. DIB aşağıdaki renk ve boyut bilgilerini içerir:
- Dikdörtgen görüntünün oluşturulduğu cihazın renk biçimi.
- Dikdörtgen görüntünün oluşturulduğu cihazın çözünürlüğü.
- Görüntünün oluşturulduğu cihazın paleti.
- Kırmızı, yeşil, mavi ( RGB) üçlüleri dikdörtgen görüntüdeki piksellere eşleyen bit dizisi.
- Bit dizisinin boyutunu küçültmek için kullanılan veri sıkıştırma düzenini (varsa) gösteren bir veri sıkıştırma tanımlayıcısı.
Renk ve boyut bilgileri, BITMAPINFOHEADER yapısından ve ardından iki veya daha fazla RGBQUAD yapısından oluşan BITMAPINFO yapısında depolanır. BITMAPINFOHEADER yapısı piksel dikdörtgeninin boyutlarını belirtir, cihazın renk teknolojisini açıklar ve bit eşlem boyutunu küçültmek için kullanılan sıkıştırma düzenlerini tanımlar. RGBQUAD yapıları, piksel dikdörtgeninde görünen renkleri tanımlar.
İki tür DIB vardır:
- Kaynağın sol alt köşede yer aldığı aşağıdan yukarı DIB.
- Kaynağın sol üst köşede yer aldığı yukarıdan aşağı DIB.
Bit eşlem bilgileri üst bilgi yapısının Height üyesi tarafından gösterildiği gibi dib yüksekliği pozitif bir değerse, alttan yukarı DIB'dir; yükseklik negatif bir değerse, yukarıdan aşağıya DIB'dir. Yukarıdan aşağıya DIB'ler sıkıştırılamaz.
Renk biçimi, renk düzlemleri ve renk bitleri sayısı bakımından belirtilir. Renkli düzlemlerin sayısı her zaman 1'dir; renk bitlerinin sayısı tek renkli bitler için 1, VGA bit eşlemleri için 4 ve diğer renk cihazlarında bit eşlemler için 8, 16, 24 veya 32'dir. Uygulama, ikinci bağımsız değişken olarak BITSPIXEL belirterek getDeviceCapsişleviniçağırarak belirli bir görüntülemenin (veya yazıcının) kullandığı renk bitlerinin sayısını alır.
Görüntü cihazının çözünürlüğü metre başına piksel cinsinden belirtilir. Bir uygulama, bu üç adımlı işlemi izleyerek video ekranı veya yazıcı için yatay çözünürlüğü alabilir.
- İkinci bağımsız değişken olarak HORZRES belirterek GetDeviceCapsişleviniçağırın.
- İkinci bağımsız değişken olarak HORZSIZE belirterek getdeviceCaps ikinci kez çağırın.
- İlk dönüş değerini ikinci dönüş değerine bölün.
Uygulama, farklı parametrelerle aynı üç adımlı işlemi kullanarak dikey çözünürlüğü alabilir: HORZRES yerine VERTRES ve HORZSIZE yerine VERTSIZE.
Palet, bir görüntü cihazının renk paletindeki her renk için kırmızı, yeşil ve mavi yoğunluk bileşenlerini belirten RGBQUAD yapıları dizisiyle temsil edilir. Palet dizisindeki her renk dizini, bit eşlem ile ilişkilendirilmiş dikdörtgen bölgedeki belirli bir piksele eşler. Bit cinsinden bu dizinin boyutu, dikdörtgenin piksel cinsinden genişliğine eşdeğerdir ve piksel cinsinden dikdörtgenin yüksekliğiyle çarpılır ve cihaz için renk bitlerinin sayısıyla çarpılır. Bir uygulama, GetDeviceCaps işlevini çağırarak ve ikinci bağımsız değişken olarak NUMCOLORS belirterek cihaz paletinin boyutunu alabilir.
Windows, 8-bpp ve 4-bpp aşağıdan yukarı DIB'ler için palet dizisinin sıkıştırmasını destekler. Bu diziler, çalışma uzunluğu kodlama (RLE) şeması kullanılarak sıkıştırılabilir. RLE düzeni, renk dizini kullanan ardışık piksel sayısını belirten ilk bayt ve dizini belirten ikinci bayt olmak üzere 2 baytlık değerleri kullanır. Bit eşlem sıkıştırması hakkında daha fazla bilgi için, BITMAPINFOHEADER, BITMAPFILEHEADER, BITMAPV4HEADERve BITMAPV5HEADER yapılarının açıklamasına bakın.
Bir uygulama, gerekli yapıları başlatıp GetDIBits işlevini çağırarak DDB'den DIB oluşturabilir. Bir cihazın bu işlevi destekleyip desteklemediğini belirlemek için GetDeviceCaps işlevini çağırın ve RASTERCAPS bayrağı olarak RC_DI_BITMAP belirtin.
Bit eşlem kopyalaması gereken bir uygulama, saydam renkle eşleşen pikseller dışında bir kaynak bit eşlem içindeki tüm pikselleri hedef bit eşlemlere kopyalamak için TransparentBlt kullanabilir.
Uygulama, SetDIBitsToDevice veya StretchDIBits işlevini çağırarak görüntü cihazında piksel ayarlamak için DIB kullanabilir. Bir cihazın SetDIBitsToDevice işlevini destekleyip desteklemediğini belirlemek için, rastERCAPS bayrağı olarak RC_DIBTODEV belirterek GetDeviceCapsişleviniçağırın. Cihazın StretchDIBitsdesteklenip desteklenmediğini belirlemek için RASTERCAPS bayrağı olarak RC_STRETCHDIB belirtin.
Önceden var olan bir DIB'yi görüntülemesi gereken bir uygulama SetDIBitsToDevice işlevini kullanabilir. Örneğin, bir elektronik tablo uygulaması var olan grafikleri açabilir ve SetDIBitsToDevice işlevini kullanarak bunları bir pencerede görüntüleyebilir. Ancak bir penceredeki bit eşlemleri tekrar tekrar yeniden çizmek için uygulama, BitBltişlevini kullanmalıdır. Örneğin, animasyonlu grafikleri ses ile birleştiren bir multimedya uygulaması, BitBlt işlevini çağırmanın avantajını çünküSetDIBitsToDevice işlevinden daha hızlı yürütülür.