bir resmi bozmadan küçültme

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
myalcin
Üye
Mesajlar: 63
Kayıt: 11 Mar 2008 03:45

bir resmi bozmadan küçültme

Mesaj gönderen myalcin »

iyi günler.
bir resmin kalitesini bozmadan nasıl küçültebilirim.
örneğin 1024x768 lik bir resmi photoshopta 800x600 olarak boyutlandırdığım zaman netlikte bir bozulma olmuyor .Fakat şöyle bir kod dizisi yaptım.

Kod: Tümünü seç

procedure TForm1.Button27Click(Sender: TObject);
var
resim1,resim2:TBitmap;
Dortgen:TRect;
begin
try
resim1:= TBitmap.Create;
resim1.Height:=Image.Picture.Height;
resim1.Width:=Image.Picture.Width;
resim1.Canvas.Draw(0,0,Image.Picture.Graphic);
resim2:=TBitmap.Create;
resim2.Width:=ResimEn.EditValue;
resim2.Height:=ResimBoy.EditValue;
Dortgen:=Rect(0,0,ResimEn.EditValue,ResimBoy.EditValue);
resim2.Canvas.StretchDraw(Dortgen,resim1);
resim2.SaveToFile('C:\1.bmp');
except
  ShowMessage('hata');
end;
end;
bu kodları kullandığımda programdan resimen ve resimboy spinedit lerine aynı orandaki boyunu giriyorum resmin yine biraz pürüzlenme oluyor
yani photoshoptaki gibi net küçülmüyor. bitmap in pixelformatını da pf32bit yaptım yine olmadı nasıl bir çözüm bulabilirim yardımlarınız için şimdiden teşekkürler.
Kullanıcı avatarı
csunguray
Üye
Mesajlar: 855
Kayıt: 09 Ara 2006 05:08
Konum: Adana
İletişim:

Re: bir resmi bozmadan küçültme

Mesaj gönderen csunguray »

JCl (http://sourceforge.net/projects/jcl) içerisindeki Stretch prosedürünü kullanabilirsiniz.
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/)
myalcin
Üye
Mesajlar: 63
Kayıt: 11 Mar 2008 03:45

Re: bir resmi bozmadan küçültme

Mesaj gönderen myalcin »

çok teşekkür ederim kardeş.
Stretch kodu işe yaradı .Resmi hiç bozmadan küçültebiliyorum.Muhteşemm :D :D :D :D
Kullanıcı avatarı
conari
Üye
Mesajlar: 2102
Kayıt: 27 Nis 2006 03:10
Konum: İstanbul & Gebze Karışık

Re: bir resmi bozmadan küçültme

Mesaj gönderen conari »

Kodu paylaşırmısın.
Teşekkürler.
Bir kelimenin anlamını öğretsen bile yeter..
ResimResim
ikutluay
Üye
Mesajlar: 2341
Kayıt: 03 Tem 2007 10:13

Re: bir resmi bozmadan küçültme

Mesaj gönderen ikutluay »

conari yazdı:Kodu paylaşırmısın.
Teşekkürler.

JCL nin içinde ustacım. sadece bir procedure. ama kullanım için JCL gerekiyor.
Kişi odur ki, koyar dünyada bir eser. Eseri olmayanın yerinde yeller eser./Muhammed Hadimi
http://www.ibrahimkutluay.net
http://www.ibrahimkutluay.net/blog
hasan
Üye
Mesajlar: 129
Kayıt: 16 Oca 2004 10:01
Konum: Bursa
İletişim:

Re: bir resmi bozmadan küçültme

Mesaj gönderen hasan »

ben bulamadım arkadaşlar,şu kodları komple yazarsanız seviniriz.
stretchgraphicdemomain diye bir örnek var bahsettiğiniz function o örneğin içinde midir ?
::::::::www.BursaEmlak.com:::::::::
Emlak ve Emlakçının buluşma Noktası
Kullanıcı avatarı
csunguray
Üye
Mesajlar: 855
Kayıt: 09 Ara 2006 05:08
Konum: Adana
İletişim:

Re: bir resmi bozmadan küçültme

Mesaj gönderen csunguray »

Kod: Tümünü seç

uses Jpeg, JclGraphics;

procedure Form1.StretchImage(var Image1: TImage; StretchType: Byte; NewWidth, NewHeight: Word);
var
  Jpeg1: TJpegImage;
  CompressedImage: TImage;
  Oran, OranW, OranH: Real;
begin
  if Image1.Picture.Graphic<>nil then
  begin
    if (Image1.Picture.Graphic.Width >300) or (Image1.Picture.Graphic.Height>300) then
    begin
    //    ShowMessage('Genişlik: '+IntToStr(Image1.Picture.Graphic.Width)+'  Yükseklik: '+IntToStr(Image1.Picture.Graphic.Height));
      CompressedImage:=TImage.Create(Self);
      if StretchType=stBuyukseKucult then
      begin
        if (Image1.Picture.Graphic.Width>newWidth) or
           (Image1.Picture.Graphic.Height>NewHeight) then
        begin
          OranW:=NewWidth/Image1.Picture.Graphic.Width;
          OranH:=NewHeight/Image1.Picture.Graphic.Height;
          if OranW>OranH then Oran:=OranH else Oran:=OranW;
          //\\ JCL Graphics ten dolayı iptal
          Stretch(Round(Image1.Picture.Graphic.Width*Oran),
                  Round(Image1.Picture.Graphic.Height*Oran),
                  rfBell, 1, Image1.Picture.Graphic, CompressedImage.Picture.Bitmap);
          Image1.Picture.Bitmap.Assign(CompressedImage.Picture.Bitmap);
        end;
      end else
      begin
        if StretchType=stKucukseBuyult then
        begin
          if (Image1.Picture.Graphic.Width<NewWidth) or
             (Image1.Picture.Graphic.Height<NewHeight) then
          begin
            OranW:=NewWidth/Image1.Picture.Graphic.Width;
            OranH:=NewHeight/Image1.Picture.Graphic.Height;
            if OranW>OranH then Oran:=OranH else Oran:=OranW;
            Stretch(Round(Image1.Picture.Graphic.Width*Oran),
                    Round(Image1.Picture.Graphic.Height*Oran),
                    rfBell, 1, Image1.Picture.Graphic, CompressedImage.Picture.Bitmap);
            Image1.Picture.Bitmap.Assign(CompressedImage.Picture.Bitmap);
          end;
        end else
        begin
          if StretchType=stHerDurumdaStretch then
          begin
            OranW:=NewWidth/Image1.Picture.Graphic.Width;
            OranH:=NewHeight/Image1.Picture.Graphic.Height;
            if OranW>OranH then Oran:=OranH else Oran:=OranW;
            Stretch(Round(Image1.Picture.Graphic.Width*Oran),
                    Round(Image1.Picture.Graphic.Height*Oran),
                    rfBell, 1, Image1.Picture.Graphic, CompressedImage.Picture.Bitmap);
            Image1.Picture.Bitmap.Assign(CompressedImage.Picture.Bitmap);
          end;
        end;
      end;
      CompressedImage.Free;
      // ShowMessage('Küçültüldü Genişlik: '+IntToStr(Image1.Picture.Bitmap.Width)+'  Yükseklik: '+IntToStr(Image1.Picture.Bitmap.Height));
    end;
  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/)
hasan
Üye
Mesajlar: 129
Kayıt: 16 Oca 2004 10:01
Konum: Bursa
İletişim:

Re: bir resmi bozmadan küçültme

Mesaj gönderen hasan »

hocam
[Error] Unit1.pas(40): Undeclared identifier: 'stBuyukseKucult'
[Warning] Unit1.pas(40): Comparing signed and unsigned types - widened both operands
[Error] Unit1.pas(56): Undeclared identifier: 'stKucukseBuyult'
[Warning] Unit1.pas(56): Comparing signed and unsigned types - widened both operands
[Error] Unit1.pas(71): Undeclared identifier: 'stHerDurumdaStretch'
[Warning] Unit1.pas(71): Comparing signed and unsigned types - widened both operands

kısımlarında hata veriyor ? Bu kısımlar nerde tanımlanacak ?
::::::::www.BursaEmlak.com:::::::::
Emlak ve Emlakçının buluşma Noktası
Kullanıcı avatarı
csunguray
Üye
Mesajlar: 855
Kayıt: 09 Ara 2006 05:08
Konum: Adana
İletişim:

Re: bir resmi bozmadan küçültme

Mesaj gönderen csunguray »

Kod: Tümünü seç

const
  // Image Stretch Tipleri
  stAyniKalsin= 0;
  stBuyukseKucult= 1;
  stKucukseBuyult= 2;
  stHerDurumdaStretch= 3;
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/)
hasan
Üye
Mesajlar: 129
Kayıt: 16 Oca 2004 10:01
Konum: Bursa
İletişim:

Re: bir resmi bozmadan küçültme

Mesaj gönderen hasan »

Hocam cevaplarınız için teşekkür ederim.Kod gayet güzell çalılştı şimdi sorunsuz.Peki boyutlar küçüldüğünde Ağırlığı da küçülüyor mu bu kodla otomatik ? Mesela 2.5 MB resim 800*600 e inince sanırım otomatik olarak 125 KB civarlarına iniyodur dimi ? Ayırca bu küçülen resmi farklı kaydet seçeneği ile eskisinin üstüne kaydetme olayını nasıl yaparız ? O konuda da yardımcı olursan bu kod ttam kullanılabilir olacak açıkçası.Şimdiden tşk...
::::::::www.BursaEmlak.com:::::::::
Emlak ve Emlakçının buluşma Noktası
hasan
Üye
Mesajlar: 129
Kayıt: 16 Oca 2004 10:01
Konum: Bursa
İletişim:

Re: bir resmi bozmadan küçültme

Mesaj gönderen hasan »

Aşağıdaki kodla yaptım ama şöle bişi isticem olur mu ki ? w : 3072 h : 2304 boyularında ve 2,5 MB ağırlığında bir resim mevcut , 800*600 yaptığımda ağırlığı 832 KB ye düşürdü , ben bunu 800*600 boyutlarında 100 KB civarına nasıl dönüştürebilirim arkadaşlar ? burda nasıl ki boyutu kendimiz verebiliyosak , ağırlığını da belirlememiz mümkün müdür _? Asıl yapmak istediğim budur ?

if SavePictureDialog1.Execute Then
Begin
Image1.Picture.Bitmap.SaveToFile(SavePictureDialog1.FileName +'.jpg');
End;
::::::::www.BursaEmlak.com:::::::::
Emlak ve Emlakçının buluşma Noktası
Kullanıcı avatarı
conari
Üye
Mesajlar: 2102
Kayıt: 27 Nis 2006 03:10
Konum: İstanbul & Gebze Karışık

Re: bir resmi bozmadan küçültme

Mesaj gönderen conari »

ikutluay yazdı:
conari yazdı:Kodu paylaşırmısın.
Teşekkürler.
JCL nin içinde ustacım. sadece bir procedure. ama kullanım için JCL gerekiyor.
Jedi Paketi kurulu bende ama JVthubnailjpg comp falan mı? kullanılıyor ondan sordum.
Bir kelimenin anlamını öğretsen bile yeter..
ResimResim
Cevapla