bir jpeg resim dosyasını byte byte okuyup başka bir dosyanın içine yazmak istiyorum (örn: erkan.txt dosyası içine yazmak gibi)
tabi yazdığım bu bilgiyi okuyup tekrar jpg uzantılı olarak kaydettiğimde yada delphide image nesnesine aktardığım zaman resim yine görünecek (bu arada bu byte byte aldığım bilgiyi timage nesnesinde de nasıl göstertebilriim bu da 2.soru oldu
merhaba, bir dosyayı
BlockWrite() ve BlockRead() ile okuyup yazabilirsin. binary olarak okuyup yazdığı için bir exe yi bile txt ye çevirip tekrar exe ye çevirdiğinde çalışır..
kolay gelsin
Dosya bicimlerinde bicim bilgisi genelde dosyanin baslik kisminda tutulur(header). Bu kisimdan sonra da veri(data) bolumu gelir.
Ornegin:
BMP dosyalarinda resmin cozunurlugu, renk derinligi, boyutlari baslikta(header); resim verisi ise govdede(Body) saklanir.
MP3 dosyalarinda sesin frekansi, stereo-mono ozalligi, bitrate bilgisi baslikta; ses verisi de govdededir.
Uygulama BMP dosyasini acarken once baslik kismini okur ve verinin bulundugu govde kismini nasil okuyacagi veya nereleri okuyacagi hakkinda bilgi edinir.
Senin soruna yaklasirsak:
Uygulamalar baslik kismindaki bilgiye gore govdeyle etkilesime girip islem yaparlar. Bu calisma duzenini bozmadan dosyaya fazladan veri yerlestirmek mumkundur.
Soyle ki:
50 byte lik bir JPEG dosyamiz olsun.
Bu dosyaya ek bilgi yerlestirmek icin ilk 50 byte da kesinlikle degisiklik yapmadan dosyanin boyutunu artirmaliyiz. 51. byte dan baslayarak (51 dahil) dosyaya veri yerlestirebiliriz.
Bu yerlestirilen veriler JPEG deki resim verisini etkilemeyeceginden JPEG de sorunsuz calisacaktir.
Bu yontem kendiliginden acilan EXE lerde de kullanilir (self-extracting exe). Tek bir exe dosyasindan cikarilan kurulum dosyalari, exe nin sonuna eklenen fazladan verilerdir.
Bu yontemin her bicimdeki (format) dosyaya uygulanamayacagini da belirtelim. Bazi dosya bicimleri dosya sonuna da ozel veriler koyuyor olabilir.
Sonuc olarak:
JPEG dosyanin boyutunu not et.
dosyayi ikili olarak ac ve INI verisini dosyanin sonuna yerlestir.
INI verisini okurken not ettigin dosya boyutunundan baslayarak veriyi oku. (dosya boyutu +1)