resim kaydetme, hata nerede bulamıyorum.
Forum kuralları
Forum kurallarını okuyup, uyunuz!
Forum kurallarını okuyup, uyunuz!
Re: resim kaydetme, hata nerede bulamıyorum.
olmadı biraz ara veriyip tekrar bakıyım.
hocam yardımın için tşkler.
hocam yardımın için tşkler.
Re: resim kaydetme, hata nerede bulamıyorum.
Ö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:
Bir resmi blob saha'ya kaydetmek için aşağıdaki kodu kullanabilirsiniz:
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;
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/)
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/)
Re: resim kaydetme, hata nerede bulamıyorum.
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.
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.
Re: resim kaydetme, hata nerede bulamıyorum.
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.
Re: resim kaydetme, hata nerede bulamıyorum.
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;
AdoQuery yerine IBQuery İle yapılabilirmi
Re: resim kaydetme, hata nerede bulamıyorum.
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.
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.
Re: resim kaydetme, hata nerede bulamıyorum.
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...
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
-
- Üye
- Mesajlar: 261
- Kayıt: 21 Tem 2006 04:59
- İletişim:
Re: resim kaydetme, hata nerede bulamıyorum.
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
saygılar herkese