Jpg to Binary Code

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
s1lv3r
Üye
Mesajlar: 91
Kayıt: 09 Nis 2006 03:03

Jpg to Binary Code

Mesaj gönderen s1lv3r »

Jpg veya bir exeyi binary ( 0 ve 1 sistemi) koda dönüştürmek ve bunu istediğim zamna yine jpg veya exe haline getirmek istiyorum bu mümkünmü ?
ulu coder
Üye
Mesajlar: 838
Kayıt: 01 Nis 2006 06:46
Konum: Ankara

Mesaj gönderen ulu coder »

Aslında her şey binary kod...
Bilgisayarda kayıt zaten 1-0 şeklinde.
Neye dönüştüreceksin anlamadım.

Dosyayı açılamaz hale getirmek istiyorsan, uzantıyı silmen yeterli.
Ama bu sefer de Birlikte Aç komutuyla uygun program seçilerek yine açılabilir.
Bunu aşmak için de dosyanın başına saçma sapan bir kaç bayt yazman yeterli olur diye düşünüyorum.
s1lv3r
Üye
Mesajlar: 91
Kayıt: 09 Nis 2006 03:03

Mesaj gönderen s1lv3r »

0 ve 1 kodlarına dönüştürüp not defterine veya memoya onun kodlarını almak daha sonra lazım olunca not defterindeki 0 ve 1 leri yine proma gönderip oradan eski haline gelmesini isityorum.
ulu coder
Üye
Mesajlar: 838
Kayıt: 01 Nis 2006 06:46
Konum: Ankara

Mesaj gönderen ulu coder »

BlockRead, BlockWrite, F1 tuşu :wink:
Kullanıcı avatarı
Opt2000
Üye
Mesajlar: 216
Kayıt: 09 Tem 2003 10:04

Mesaj gönderen Opt2000 »

Selam,

Bu dediğini yapması çok da zor değil. Gerekli fonksiyonları yazdım.

Kod: Tümünü seç

function IntToBin(Value: integer): string;
var
  I:Integer;
  RtnVal:string;
  tmp:DWORD;
begin

  SetLength(RtnVal, 32);
  FillMemory(@RtnVal[1], 32, Byte('0'));
  tmp:=1;
	for I:=1 to 32 do
  begin
    if (tmp and Value) > 0 then
      RtnVal[33 - I]:='1';
    tmp:=tmp shl 1;
  end;
  Result:=RtnVal;
end;

function BinToInt(Value: string): Integer;
var
  I:Integer;
  RtnVal:Integer;
  tmp:Integer;
begin
  RtnVal:=0;
  tmp:=1;
	for I:=1 to 32 do
  begin
    if Value[33 - I] = '1' then
      Inc(RtnVal, tmp);
    tmp:=tmp shl 1;
  end;
  Result:=RtnVal;
end;

Resmi binary stringlere çevirmek için yapman gereken şu. Resmi TFileStream kullanarak aç. Her seferinde bir tane integer oku ve bu değeri IntToBin fonksiyonuna gönder. Geri gelen değeri başka bir dosyaya yaz.

Resmi eski haline getirmek için de tam tersi yapılacak, ama dikkat etmen gereken tek nokta, her seferinde 32 byte okuman gerektiğidir.

Ama bu şekilde yapacak olursan program çok yavaş çalışacaktır. Buraya adam gibi bir optimizasyon koyman gerekir (Örneğin resmin tamamını Int dizisine almak ve bellekten işlem yapmak gibi) Bu arada IntToBin ve BinToInt fonksiyonlarında da optimizasyon yapılabilir, karışık olmasın diye böyle yazdım.

Bu arada böyle bir sistem çok anlamsız. Çünkü sonuçta elde edeceğin dosya, normal JPEG dosyanın tam 8 katı büyüklüğünde olacak. 4 byte olan integer değerleri 32 byte olan string değerlerde saklamaya çalışıyorsun.

Kolay gelsin,
Bahadır Alkaç
s1lv3r
Üye
Mesajlar: 91
Kayıt: 09 Nis 2006 03:03

Mesaj gönderen s1lv3r »

Teşekkürler kodlar için. Peki resim içine yazı gizleme (Steganografi) de bu şekildemi yapılıyor ? Yani bu 0 ve 1 lerin arasına bir yaznın da binary codeunu gömsem resimde herhangi bir bozukluk ve değişiklik olurmu ?
ulu coder
Üye
Mesajlar: 838
Kayıt: 01 Nis 2006 06:46
Konum: Ankara

Mesaj gönderen ulu coder »

0-1'lerin arasına gömersen ciddi değişiklikler olabilir.
0-255,0-255,0-255 (bir renk)'lerin arasına gömersen ve arada boşluklar bırakırsan fazla farkedilmez.
ama başka bir yöntem de olabilir.
Kullanıcı avatarı
bluekid
Kıdemli Üye
Mesajlar: 541
Kayıt: 11 Haz 2004 10:45
İletişim:

Mesaj gönderen bluekid »

renk bilgilerinin - bmp için konuşuyorum jpeg de sıkıştırma ve açma- en düşük bitini kullanarak yazabilirsin
bir zamanlar öyle birşey yazmıştım
viewtopic.php?t=13152
s1lv3r
Üye
Mesajlar: 91
Kayıt: 09 Nis 2006 03:03

Mesaj gönderen s1lv3r »

Güzel olmuş eline sağlık. Kaynak paylaşırmısın yada projeyi nasıl yaptığını biraz daha ayrıntılı anlatır mısın ?
Kullanıcı avatarı
bluekid
Kıdemli Üye
Mesajlar: 541
Kayıt: 11 Haz 2004 10:45
İletişim:

Mesaj gönderen bluekid »

CBuilder ile yazdım ama basit her pikselin renklerinin son bitlerini kullanıyorsun ve yazacağın mesajı bit bit renklere yazıyorsun...
Cevapla