PDA

Tam Sürümünü Görmek İçin : Bitmapin icine mesaj gomme.(watermarking)


Flagrant
05/04/2007, 01:24
slmlar,

Bir bitmapin icine mesaj gommeye calisiyorum. Elimde Bitmap.h diye bir headerim var.

Bitmap B;
B.LoadFromFile("mesajgomulecekbmp.bmp");
Simdi classim da bmp dosyasini load ettim.
Burada;

MesajGom(string msg) - diye bir member function yazmam gerekiyor header dosyasina yani:

B.MesajGom("ali ata bak"); // max 256 char

yaptigimda bmp dosyamin icine sekli bozulmadan "ali ata bak" i gommem lazim"

Classin headerinda uint8 *data; diye bir pointerim var bmp dosyasinin ilk pixelini(8 bit) gosteriyor. Ilk pixele mesajimin uzunlugunu gommem gerekiyor. Daha sonraki sekiz pixele 'a' karakterini daha sonraki 8 pixele 'l' karakterini gommem gerekiyor.

Simdi sorum su:

Oncelikle sayilari veya charlari binarye nasil cevirebilirim?

Mesela stringimin uzunlugu 25 bunu 00011001 e cevirmem gerekiyor bu nasil olur?

Veya 'a' charini once ascii koddaki degerine oradan da binaryiye cevirmem gerekiyor bunu nasil yaparim.

bir de yukaridakiler icin sonraki adamlar icin bir tavsiyesi olan varsa, yazarsa iiyi olur ama simdilik ilk adimda binaryye cevirme islemi yeterli gorunuyor.

tesekkurler..


bluekid
05/04/2007, 09:17
Bir zamanlar öyle bir program yazmıştım
http://derindelimavi.blogspot.com/2005/12/text-into-bmp.html
Bu programın biraz daha gelişmiş halde yenisini ve dolayısıyla cross-platform versiyonunuda çıkarmayı planlıyorum - kısmet -

Classin headerinda uint8 *data; diye bir pointerim var bmp dosyasinin ilk pixelini(8 bit) gosteriyor. Ilk pixele mesajimin uzunlugunu gommem gerekiyor. Daha sonraki sekiz pixele 'a' karakterini daha sonraki 8 pixele 'l' karakterini gommem gerekiyor.
bmp dosya sistemini iyi araştır. 1 pixel renk değeri için RGBA olmak üzere 4 byte ta tutulur.
bir byte ın bit değerlerini almak için pek çok metod var mesela union kullana bilirsin.
yada 1 2 4 8 16 32 64 128 değerleriyle And (&) liyerek bit değerlerini alabilirsin.

ceeyt
06/04/2007, 02:51
char ch ='a';
int nCh = (int)ch; bu sekilde yaparsan 'a' karakterine ait degere ulasabilirsin.

imgedeki bozulmayi gozle farkedilemeyecek seviyeye indirmek ama bunu yaparkende kendine ait bilgiyi imgeye gomebilmek icin sunu onerirm;

imgenin ayrik kosinus donusumunu (DCT) alarak frekans duzlemine gec.Bir imgenin ozelliklerinin cok buyuk bir kismi alcak frekanslarda toplandigindan, alcak frekans bilesenlerine dokunmadan sadece yuksek frekans bilgileri uzerinde degisiklikler yapmak imgenin kalitesinden cok az kaybettirir.

DCT donusumunden sonra sifre bilgisini kendi belirledigin bir yontemle sifreleyerek yuksek frekans bilgilerine yazarsan imgenin kalitesinden nerdeyse hicbirsey kaybetmeyerek istedigin bilgiyi gomebilirsin.


kolay gelsin...