Timage den VT ye kayıt [Çözüldü]

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
Kullanıcı avatarı
xozcanx
Üye
Mesajlar: 354
Kayıt: 05 Oca 2012 12:55

Timage den VT ye kayıt [Çözüldü]

Mesaj gönderen xozcanx »

Merhaba;

Kod: Tümünü seç

procedure TForm1.Resimal;
var
  pano :TClipboard;
begin
  pano:=TClipBoard.Create;
  if pano.HasFormat(CF_BITMAP) then
     image1.Picture.Bitmap.Assign(pano);
     pano.Free;
end;

Kod: Tümünü seç

procedure TForm1.Button1Click(Sender: TObject);
var
  Resim: TMemoryStream;
begin
  if not (Image1.Picture.Graphic is TJPEGImage) then
    Image1.Picture.Graphic := TJPEGImage.Create;
    Resim := TMemoryStream.Create;
  try
    Image1.Picture.Graphic.SaveToStream(Resim);
    IBTable1.Append;
    IBTable1ADI.Text    :=Edit1.Text;
    IBTable1SOYADI.Text :=Edit2.Text;
    Resim.Position      := 0;
    TBlobField(IBTable1.FieldByName('RESIM')).LoadFromStream(Resim);
    IBTable1.Post;
    IBTransaction1.CommitRetaining;
   finally
    Resim.Free;
  end;
end;
Yukarıdaki kodlar ile hafızaya alınan resmi image1 üzerinde görüntülüyorum. fakat kayıt esnasında kullandığım kodlarda şöyle bir sorun var JPEG uzantılı dosyaları VT'ye kayıt edebilirken bmp yada farklı formattaki resimleri Timage üzerinden kayıt edemiyorum.

Görüntüleme için kullandığım kodlar ise aşağıdaki gibi, Bu alanda sorun yok sadece paylaşmak istedim.

Kod: Tümünü seç

procedure TForm1.DBGrid1Click(Sender: TObject);
var
  JpegImage: TJPEGImage;
  BlobStream: TStream;
begin
  if (not IBTable1.FieldByName('RESIM').IsNull) then
    begin
      BlobStream := IBTable1.CreateBlobStream(IBTable1.FieldByName('RESIM'),bmRead);
      JpegImage := TJPEGImage.Create;
      try
        JpegImage.LoadFromStream(BlobStream);
        Image2.Picture.Assign(JpegImage);
        Image2.Visible := True;
      finally
        JpegImage.Free;
        BlobStream.Free;
      end;
    end
  else
    Image2.Visible := False;
end;
Şimdiden ilgilenen herkese Teşekkürler.

.
En son xozcanx tarafından 28 Kas 2014 03:51 tarihinde düzenlendi, toplamda 1 kere düzenlendi.
Nasibinde varsa, alırsın karıncadan bile ders, Nasibinde yoksa, bütün cihan önüne serilse, sana ters..
Kullanıcı avatarı
csunguray
Üye
Mesajlar: 855
Kayıt: 09 Ara 2006 05:08
Konum: Adana
İletişim:

Re: Timage den VT ye kayıt

Mesaj gönderen csunguray »

Aslında kaydediyorsun. Ama yüklerken geri yükleyemiyorsun. Çünkü yüklerken resmin her halükarda JPEG olduğunu varsayıyorsun. Bu durumda kaydederken de öncelikle JPEG formatına çevirip kaydedersen iyi olur.

Kod: Tümünü seç

procedure TForm1.StoreJpegImageToBlobField(Image1: TImage; var BlobField1: TBlobField);
var
  Stream1: TBlobStream;
  Jpeg1: TJpegImage;
begin
  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);
        end;
      end;
    end;
  finally
    Jpeg1.Free;
    Stream1.Free;
  end;
end;

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/)
Kullanıcı avatarı
xozcanx
Üye
Mesajlar: 354
Kayıt: 05 Oca 2012 12:55

Re: Timage den VT ye kayıt

Mesaj gönderen xozcanx »

İlginize gerçekten teşekkürler.
Konuyu araştırmadan buraya yazmadım emin olun. 4 yıl önceki bir konuda da Buradaki kodları belirtmişsiniz.
viewtopic.php?f=2&t=6107&start=15
Ama malesef istediğim sonucu alabilmiş değilim :(
Ayrıca Şu alanda da hata vermekte XE5 kullanıyorum.

Resim
Nasibinde varsa, alırsın karıncadan bile ders, Nasibinde yoksa, bütün cihan önüne serilse, sana ters..
Kullanıcı avatarı
csunguray
Üye
Mesajlar: 855
Kayıt: 09 Ara 2006 05:08
Konum: Adana
İletişim:

Re: Timage den VT ye kayıt

Mesaj gönderen csunguray »

Eğer DB'ye bağlanırken ADO bileşenlerini kullanıyorsanız:

Kod: Tümünü seç

var
  Stream1: TADOBlobStream;
olarak değiştirin.
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/)
Kullanıcı avatarı
ender_arslanturk
Kıdemli Üye
Mesajlar: 709
Kayıt: 18 Şub 2005 03:38
Konum: İstanbul

Re: Timage den VT ye kayıt

Mesaj gönderen ender_arslanturk »

Selâmlar,

İster jpg, ister png olsun resmin datasını aldırarak ta kayıt edebilirsiniz aslında.. Gösterirken yine datasını image atayabilirsiniz. :)

Değişik bir yöntem ama gönül rahatlığıyla her formatı veritabanına kayıt ettirir.

Bakınız : www.delphiturkiye.com/forum/viewtopic.php?f=19&t=30850
Kullanıcı avatarı
xozcanx
Üye
Mesajlar: 354
Kayıt: 05 Oca 2012 12:55

Re: Timage den VT ye kayıt

Mesaj gönderen xozcanx »

Vermiş olduğunuz değerli cevaplar için teşekkürler.
@ender_arslanturk
sizin çalışmanızıda inceledim olaya farklı bir bakış açısı getirmşsiniz bu gerçekten çok iyi, sanırım benim seçtiğim resmin boyutundan kaynaklanıyor olacak çözümleyip açması biraz zaman aldı :(
ilk mesajdada belirttiğim gibi panoda olan bir resmi timagede gösteriyorum ve bunu kaydetmek istiyorum demiştim. aradaki if kontrolünü kaldırdım ve kayıt işlemini direkt yapıyorum şuan içinde soruna çözüm bulmuş durumdayım.

Kod: Tümünü seç

var
  Resim: TMemoryStream;
begin
    Resim := TMemoryStream.Create;
    Image1.Picture.Graphic.SaveToStream(Resim);
    IBTABLE1.Open;
    IBTable1.Append;
    IBTable1ADI.Text    :=Edit1.Text;
    IBTable1SOYADI.Text :=Edit2.Text;
    Resim.Position      := 0;
    TBlobField(IBTable1.FieldByName('RESIM')).LoadFromStream(Resim);
    IBTable1.Post;
    IBTransaction1.CommitRetaining;
    Resim.Free;
end;
Tekrar teşekkürler,
Nasibinde varsa, alırsın karıncadan bile ders, Nasibinde yoksa, bütün cihan önüne serilse, sana ters..
Kullanıcı avatarı
Commandx
Üye
Mesajlar: 170
Kayıt: 01 Oca 2008 05:34

Re: Timage den VT ye kayıt [Çözüldü]

Mesaj gönderen Commandx »

Çok kısa yolunu buldum

Kod: Tümünü seç

query. insert;
image1. picture. loadfromfile('c:\resim. jpg') ;
jvdbimage1. picture. assign(image1. picture. graphic) ;
query. post;
Bir ara lazım oldu.
http://www.delphibasics.co.uk/RTL.asp?Name=DaysBetween
Function PARSE( text, ilk, son:String ): String; // XML de Çok Lazım oluyor
begin
Delete(Text, 1, pos(ilk, Text) + Length(ilk)-1);
Result := Copy(Text, 1, Pos(Son, Text)-1);
end;
Cevapla