resim kaydetme, hata nerede bulamıyorum.

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
smokie
Üye
Mesajlar: 72
Kayıt: 01 Tem 2007 10:26

Re: resim kaydetme, hata nerede bulamıyorum.

Mesaj gönderen smokie »

olmadı biraz ara veriyip tekrar bakıyım.

hocam yardımın için tşkler.
Kullanıcı avatarı
csunguray
Üye
Mesajlar: 855
Kayıt: 09 Ara 2006 05:08
Konum: Adana
İletişim:

Re: resim kaydetme, hata nerede bulamıyorum.

Mesaj gönderen csunguray »

Öncelikle veri alanının tipi BLOB olmalı. Aşağıdaki kodlar çeşitli veritabanlarında denenmiş yıllardır sorunsuz çalışan kodlardır.

Bir resmi blob saha'dan okumak için aşağıdaki kodu kullanabilirsiniz:

Kod: Tümünü seç

procedure TForm1.GetJpegImageFromBlobField(var Image1: TImage;
  BlobField1: TBlobField);
var
  Stream1: TBlobStream;
  Jpeg1: TJpegImage;
begin
  // Resim Aç
  if not BlobField1.IsNull then
  begin
    try
      Stream1 := TBlobStream.Create(BlobField1, bmRead);
      Jpeg1 := TJpegImage.Create;
      Jpeg1.LoadFromStream(Stream1);
      Image1.Picture.Bitmap.Assign(Jpeg1);
    finally
      Jpeg1.Free;
      Stream1.Free;
    end;
  end else
  begin
    Image1.Picture.Graphic := nil;
  end;
end;

Bir resmi blob saha'ya kaydetmek için aşağıdaki kodu kullanabilirsiniz:

Kod: Tümünü seç

procedure TForm1.StoreJpegImageToBlobField(Image1: TImage; var BlobField1: TBlobField);
var
  Stream1: TBlobStream;
  Jpeg1: TJpegImage;
begin
  // Resim Kaydet
  try
    Stream1 := TBlobStream.Create(BlobField1, bmWrite);
    Jpeg1 := TJpegImage.Create;
    if Image1.Picture.Graphic <> nil then
    begin
      if not Image1.Picture.Graphic.Empty then
      begin
        if Image1.Picture.Graphic is TJpegImage then
        begin
          Image1.Picture.Graphic.SaveToStream(Stream1);
          // ShowMessage('O bir jpeg. size = ' + IntToStr(Stream1.Size));
        end else
        begin
          Jpeg1.Assign(Image1.Picture.Graphic);
          Jpeg1.Compress;
          Jpeg1.SaveToStream(Stream1);
          // ShowMessage('O bir jpeg değil. size = ' + IntToStr(Stream1.Size));
        end;
      end;
    end;
  finally
    Jpeg1.Free;
    Stream1.Free;
  end;
end;

En son csunguray tarafından 03 Şub 2016 08:49 tarihinde düzenlendi, toplamda 1 kere düzenlendi.
C. Sunguray
csunguray at netbilisim.kom
Net Bilişim Hizmetleri

Sıradan her programcı bilgisayarın anlayabileceği kodlar yazabilir.
Sadece iyi programcılar insanların da anlayabileceği kodlar yazarlar.
Martin Fowler (http://martinfowler.com/)
smokie
Üye
Mesajlar: 72
Kayıt: 01 Tem 2007 10:26

Re: resim kaydetme, hata nerede bulamıyorum.

Mesaj gönderen smokie »

Merhb,

csunguray,
jpeg formatlı kayıtlarda bir sorun yaşamıyorum. pdf ve diger resim formatlarını kayıtta problem oluyor. aslında hiç olmyor. alan blob. bu alana sadece jpeg değilde diger resim formatları ve pdf formatlarınıda kaydetme imkanı yokmu.
thelvaci
Kıdemli Üye
Mesajlar: 770
Kayıt: 11 Tem 2010 07:17
Konum: Istanbul
İletişim:

Re: resim kaydetme, hata nerede bulamıyorum.

Mesaj gönderen thelvaci »

Blob bir alana her türlü dosyayı yazabilirsiniz. Basit bir TMemoryStream bu iş için kafi gelecektir. TMemoryStream'a istediğiniz bir dosyayı yükler ardından Posizyon bilgisini başa çeker ve nihayet blob field'ınıza SaveToStream yaparsınız. Mesele bundan ibaret sevgili arkadaşım.
smokie
Üye
Mesajlar: 72
Kayıt: 01 Tem 2007 10:26

Re: resim kaydetme, hata nerede bulamıyorum.

Mesaj gönderen smokie »

Kod: Tümünü seç

procedure TForm1.Button1Click(Sender: TObject);
var
blobalan:TADOBlobStream;

begin

AdoQuery1.Edit;
blobalan:=TADOBlobStream.Create(TBlobField(AdoQuery1.FieldByName('FILE')),bmwrite);
blobalan.LoadFromFile('C:\abc.pdf');
blobalan.Position:=0;
TBlobField(AdoQuery1.FieldByName('FILE')).LoadFromStream(blobalan);
AdoQuery1.Post; 
gibimi..
AdoQuery yerine IBQuery İle yapılabilirmi
thelvaci
Kıdemli Üye
Mesajlar: 770
Kayıt: 11 Tem 2010 07:17
Konum: Istanbul
İletişim:

Re: resim kaydetme, hata nerede bulamıyorum.

Mesaj gönderen thelvaci »

procedure TForm1.WriteToDatabaseClick(Sender: TObject);
var
mem : TMemoryStream;
begin
mem := TMemoryStream.Create;
try
mem.LoadFromFile('c:\123.pdf');
mem.Position := 0;

ADODataSet1.Append;
ADODataSet1.FieldByName('FileName').Value := 'Accessing .Net classes in Win32 Delphi';
TBlobField(ADODataSet1.FieldByName('FileContent')).LoadFromStream(mem);
ADODataSet1.Post;

finally
mem.Free;
end;
end;

procedure TForm1.ReadFromDatabaseClick(Sender: TObject);
var
mem : TMemoryStream;
begin
mem := TMemoryStream.Create;

try
TBlobField(ADODataSet1.FieldByName('FileContent')).SaveToStream(mem);
mem.Position := 0;
mem.SaveToFile('c:\test.pdf');
finally
mem.Free;
end;
end;

gibi.
Kullanıcı avatarı
mudipasa
Üye
Mesajlar: 169
Kayıt: 13 Tem 2004 02:25
Konum: Batman

Re: resim kaydetme, hata nerede bulamıyorum.

Mesaj gönderen mudipasa »

bende senin gibi FB kullanıyorum. Belki yapmışsındır ama ben herşeyi adım adım anlatayım. Öncelikle veri tabanındaki değişkenin blob olan olacak. ondan sonra
Uses kısmına jpeg eklemelisin. Forma bir tane DBImage nesnesi yerleştir (ben jv kullanıyorum, JvDBImage) bu nesnenin veri tabanındaki değişkenini belirt, bir tane de resim dialog nesnesi ekle. Resim ekleme butonuna tıkladığın zaman ki table edit ve insert modunda değilse
[code]
var
Picture: TPicture;
ImageField: TField;
begin
if dm.tbuye.RecordCount > 0 then
Begin
if dlgOpenPicture.Execute Then
begin
try
dm.tbuye.Edit;
ImageField := JvDBImage1.Field; //('URUNRESIM');
if ImageField <> nil then
begin
Picture := TPicture.Create;
try
Picture.LoadFromFile(dlgOpenPicture.FileName);
if Picture.Graphic is TBitmap then
ImageField.Assign(Picture)
else SaveGraphicToBlobField(Picture.Graphic, ImageField);
finally
Picture.Free;
end;
end;
dm.tbuye.Post; dm.truye.CommitRetaining;
except
end;
end;
End;
end;
[/code]

birde satıraların sonuna
[code]
initialization
RegisterClasses([TIcon, TMetafile, TBitmap, TJPEGImage]);
[/code]

satırlarını ekle.
Gelelim jpeg veya bmp olayına. burda istediğini ekleyebilirsin. yalnız raporlama durumunda bmp formatında resim isteyecektir. Bu nedende BMP Valid vs. hatası alıyorsundur.

ben çalışmalarımda bunları kullanıyorum. Bir dene istersen...

Kod: Tümünü seç

www.muratdişikırık.com.tr
smokie
Üye
Mesajlar: 72
Kayıt: 01 Tem 2007 10:26

Re: resim kaydetme, hata nerede bulamıyorum.

Mesaj gönderen smokie »

tşkler.
baloglurecep
Üye
Mesajlar: 261
Kayıt: 21 Tem 2006 04:59
İletişim:

Re: resim kaydetme, hata nerede bulamıyorum.

Mesaj gönderen baloglurecep »

arkadaşlar selamlar .... bu olayı ben bir 3. nesil bileşen seti ile hallediyorum. veri tabanını ne olursa olsun nerdeyse hiç kod yazmadan resmi kaydedebilirsiniz. bırakın resmi kaydetmeyi photoshop tarzı resim işlem programı yaprsınız. veri tabalı resim albümü yaparsınız. nette araştırın bişesen setinin adı image en.
saygılar herkese
Cevapla