Okulda hocamın bir görselin pixellerine yazının gömülebileceğinden bahsetmesi ile kafamda şimşekler çaktıran proje. Aynı zamanda grafik tasarımı ile ilgilenen birisi olarak duyar duymaz çok etkilendim ve ortaya bir şeyler çıkartmak istedim.

Arayüz
Program şu şekilde çalışıyor:
Önce görseli seçiyoruz(.bmp 24bit) ve gizlemek istediğimiz yazıyı giriyoruz. Gizle ve Kaydet butonuna tıkladığımızda program gizlenecek yazının harfleri içerisinde bir iterasyon oluşturuyor. Daha sonra bu harfin ASCII kodunu alıp ikilik tabana çeviriyor. Artık elimizde 8 bitlik (örn: A harfi için 01000001) veri var. Bu 8 bit arasında bir iterasyon daha oluşturup sırası ile her biti, sol üstten başlamak kaydıyla görselin ilk pixelinin R bileşeninin LSB(en düşük değerlikli bit(orjinal görsel ile renk farkını minimum seviyeye indirmek için)) sine atıyor. Daha sonra her seferinde bir sağdaki pixel için aynı işlemi yaparak mevcut harfin binary karşılığını görselin ilk 8 pixeline gömmüş olduk. diğer bütün harfleri için uygulayarak yazıyı görsele gömmüş olduk.
Tabi bu yazıyı çözümlerken bir sorunla karşı karşıya kaldım oda gizlenmiş yazı çözümlenirken anlamlı pixel sayısını nerden bileceğim. Bu sorunuda ilk 8 pixelde harf sayısını tutarak hallettim.
Tüm bu anlattıklarımın havada kalmaması amacıyla bir örnekle açıklamak istiyorum.
Görselimiz 8×16 pixellik bir bitmap olsun. Standart formatta görseller 24 bittir ve bunun 8 biti kırmızı, 8 biti yeşil, 8 biti mavi renk tonu bilgisini tutar.
Görselimizin ilk 3 pixel satırının kırmızı ton bilgisinin haritası varsayalım şu şekilde olsun:
01001001 10011001 10001001 11100100 10011111 00001110 11001100 11100111
11100111 11001100 11001100 11100100 10001001 01001001 10011001 00001110
01001001 10011001 10001001 11100100 10011111 00001110 11001100 11100111
. .
.
Yukarıda bahsettiğim gibi her 8 pixele 1 harf gizleyebiliriz. Gizlemek istediğimiz yazı AB olsun
A harfinin ASCII karşılığı 65. 65 in binary karşılığı 01000001. B nin ise 01000010.
Önce harf sayısını ilk 8 pixele gizleyelim(ilk 8 pixel kullanılırsa max 256 harf gizlenebilir. Bu sayı artırılmak için harf sayısını tutan pixel sayısı artırılabilir.)
HARF SAYISI = 2
2 to binary = 00000010 sırası ile ilk 8 pixele işleyelim
ilk değer 0(sıfır) bunu gidip ilk satırın ilk pixelinin LSB sine işleyelim. yani 01001001 (LSB = en sağdaki bit) 1 i 0 yapalım.
Artık yazının gizlenmiş olduğu görselde bu pixelin tonu 01001000
Görseldeki renk değişimi insan gözünün ayırt edemeyeceği kadar küçük. Bizzat denedim kesinlikle ayırt etmek mümkün değil.
Bu mantıkla 2 nin binary halinin ikinci değerini (0) görselin 2. pixeline,
2 nin binary halinin üçüncü değerini (0) görselin 3. pixeline.. şeklinde hepsini atayalım.
Daha sonra A ve B harfleri içinde aynı işlemleri yapalım.
Bu mantıkla bütün pixellere aynı işlem yapıldığında artık elimizde 2 aynı görsel ama birisinin içinde yazı gizlenmiş olacak.
Gizlenmiş yazıyı çözme işlemini de aynı işlemleri tersten yürütmekle çözdüm.