bir dosyayı byte byte okuyup bir yere yazmak ve tekrar okuma

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
Kullanıcı avatarı
FXERKAN
Üye
Mesajlar: 178
Kayıt: 26 Tem 2003 11:06
Konum: Sivas - Konya
İletişim:

bir dosyayı byte byte okuyup bir yere yazmak ve tekrar okuma

Mesaj gönderen FXERKAN »

merhaba

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 :-)

teşekkürler
[ F X E R K A N © - E r k a n Ç İ F T Ç İ ]
Kullanıcı avatarı
lazio
Moderator
Mesajlar: 1527
Kayıt: 11 Tem 2003 04:55
Konum: İstanbul

Mesaj gönderen lazio »

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
DeveloperToolKit

..::|YeşilMavi|::..
P206
Kıdemli Üye
Mesajlar: 395
Kayıt: 17 Haz 2003 12:36
Konum: İstanbul

Mesaj gönderen P206 »

Delphi helpten bir örnek.

Kod: Tümünü seç

var

  FromF, ToF: file;
  NumRead, NumWritten: Integer;
  Buf: array[1..2048] of Char;
begin
  if OpenDialog1.Execute then     { Display Open dialog box }
  begin
    AssignFile(FromF, OpenDialog1.FileName);
    Reset(FromF, 1);	{ Record size = 1 }
    if SaveDialog1.Execute then      { Display Save dialog box}
    begin
      AssignFile(ToF, SaveDialog1.FileName);	{ Open output file }

      Rewrite(ToF, 1);	{ Record size = 1 }
      Canvas.TextOut(10, 10, 'Copying ' + IntToStr(FileSize(FromF))
        + ' bytes...');
      repeat
        BlockRead(FromF, Buf, SizeOf(Buf), NumRead);
        BlockWrite(ToF, Buf, NumRead, NumWritten);
      until (NumRead = 0) or (NumWritten <> NumRead);
      CloseFile(FromF);
      CloseFile(ToF);
    end;
  end;
bu istediğini karşılar sanırım.
Kullanıcı avatarı
FXERKAN
Üye
Mesajlar: 178
Kayıt: 26 Tem 2003 11:06
Konum: Sivas - Konya
İletişim:

Mesaj gönderen FXERKAN »

arkadaşlar şimdi yapmak istediğim olay şu

elimde bir resim dosyası (jpg) ve bir ini dosyası var.

bu ini dosyasında jpg image üzerinde işaretlediğim noktaları tutuyorum.

yapmak istediğim ise iki ayrı dosya kullanmak yerine tek bir dosya kullanmak.

yani bir dosyaya hem bu jpg dosyasını hemde bu noktaları (integer değerleri) yazmak ve tekrar erişip alıp istediğim gibi kullanmak istiyorum.

bunu nasıl yaparım

örnek ini dosyası

resim.ini

[parca1]
parcaadi=merhaba
x1=100
y1=50
x2=123
y2=345
x3=434
y3=356

[parca2]
parcaadi=merhaba2
x1=10
y1=30
x2=23
y2=45
x3=44
y3=556

gibi ve birde tabii ki resim.jpg dosyası var

ben bunları nasıl birleştirebilirim
[ F X E R K A N © - E r k a n Ç İ F T Ç İ ]
Hakkan
Üye
Mesajlar: 18
Kayıt: 24 Tem 2004 11:08
Konum: ISTANBUL

Mesaj gönderen Hakkan »

Merhaba.

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)

Kolay gelsin.

h.k
Cevapla