Picproje Elektronik Sitesi

SERBEST BÖLGE => Programlama ve Algoritma => Konuyu başlatan: yamak - 03 Aralık 2011, 01:04:15

Başlık: Opaklık algoritması
Gönderen: yamak - 03 Aralık 2011, 01:04:15
Merhaba arkadaşlar;
Şu menülerin transparanlık özelliğini nasıl bi algoritmayla yapıyolar. Ben şöyle düşünmüştüm; mesela bir kutucuğu transparan yapmak için bir pixel kutunun rengi bir pixel de arkadaki renkten basılırsa ekrana olabililir diye düşündüm sonra denedim ama olmadı şöyle ızgara gibi bişey çıktı ortaya :) . Acaba bu olay nasıl oluyo nasıl bi algoritama yazmak lazım.Biraz araştırdım alpha compositing diye bişey buldum ama tam anlamdım.
Başlık: Ynt: Opaklık algoritması
Gönderen: Burak B - 03 Aralık 2011, 10:53:27
RGBilk = Öndeki Piksel
RGBikinci = Zemindeki Piksel

a = opaklık
0 <= a < 1,  olsun
RGBblended = a * RGBilk + (1 - a) * RGBikinci

veya

a = opaklık
0 <= a < 0xFF,  olsun
RGBblended = a * RGBilk + (0xFF - a) * RGBikinci <- Burada 0xFF yerine 0x100 kulanırsan SHL optimizasyonu için uygunluk sağlar. Çünkü 0xFF olmasada 0x100 iki nin katıdır. ;) 0xFF ile SHL kullanarak da  yaparsın ama teknik değişiyor.

MCU' yu yoran bir işlemdir. Her bir RGB bileşeni için yapılması gerekir. Optimize edilebilir. Sabit noktalı aritmetik kullanırsan ve çarpma işlemini uygun şekilde optimize edersen.
MUL komutu gibi çok saykıllı bir komut yerine daha hızlı bir SHL ile performansı daha da artırman mümkün.

Ayrıca bu formülde opaklık tüm katmana etki eder. Eğer "Per pixel Alpha Blending" diye tabir ettiğimiz piksel başına katıştırma yapmak istersen her bir pixel için ayrı bir katman daha bulundurmak/oluşturmak/kullanmak gerekir. Bunu sağlayan resim formatları mevcuttur en çok bilinenler PNG, TGA, TIF gibi formatlardır. GIF formatıda transparanlık bilgisini saklar ancak bu biraz daha farklıdır. Çünkü matte sorunu vardır ve per pixel değildir. Bence en uygun biçim PNG. Kullandığı sıkıştırma sayesinde az yer kaplıyor. Bu sıkıştırmayı çözmek v.s. gömülü sistemlerde bir miktar RAM gerektiriyor.

Örnek resimler(alıntıdır);


(http://www.codeproject.com/KB/GDI/pxalphablend/img2.gif)(http://www.codeproject.com/KB/GDI/pxalphablend/img.gif)
Başlık: Ynt: Opaklık algoritması
Gönderen: yamak - 03 Aralık 2011, 13:35:36
Teşekkür ederim hocam deneyecem bunu :)