Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   image resizen?? (https://www.delphipraxis.net/95637-image-resizen.html)

lbccaleb 10. Jul 2007 20:10


image resizen??
 
hey DPler,

weiß einer von euch wie ich bilder (jpg) verändern kann, sprich die breite und die höhe, der inhalt sollte aber nicht verloren gehen sondern "gestretched" werden!! weiß einer rat??

das ganze sollte ich aber auch abspeichern können also nicht bloß auf der form..


ich hab auch schon gesucht, aber für mich leider nichts verwertbares gefunden, war alles in php oder java!!

arne99 10. Jul 2007 20:53

Re: image resizen??
 
entweedr komponente stretchen und resizen oder DP suche nutzen. Gibt einige Möglichkeiten! ;)

nachdem du es veraendert hast:
Zitat:

das ganze sollte ich aber auch abspeichern können also nicht bloß auf der form..
Timage1.picture.saveasfile (x);

phreax 10. Jul 2007 21:02

Re: image resizen??
 
Hier hab ich grad nen passendes Stück Code zur Hand, es wird mit Kantenglättung aus der Graphics32 Bibliothek gearbeitet.
LongSideLength gibt die Sollgröße der längeren Bildseite an (damit nichts verzerrt wird).
Das lässt sich aber auc auf beliebige Seitenlängen anpassen...


Delphi-Quellcode:
uses Jpeg, Gr32, GR32_Resamplers, FileCtrl;

procedure ScaleImages(SrcFile,DstFile: String; LongSideLength: integer);
var
  R: TKernelResampler;
  tbmpDest : TBitmap32;
  tbmpSource: TBitmap32;
  NewWidth,NewHeight: integer;
  TempWinBmp: TBitmap;
  JpgImage: TJPEGImage;
begin
      tbmpSource := TBitmap32.Create;
      try
      tbmpSource.LoadFromFile(SrcFile);
      R := TKernelResampler.Create(tbmpSource); //<-einen Resampler fürs verkleinern benutzen
      R.Kernel := TCosineKernel.Create;
      tbmpDest := TBitmap32.Create;
      try
      if tbmpSource.Width > tbmpSource.Height then
       begin
         NewWidth := LongSideLength;
         NewHeight := round(tbmpSource.Height*NewWidth / tbmpSource.Width);
       end
      else
        begin
          NewHeight := LongSideLength;
          NewWidth := round(tbmpSource.Width*NewHeight / tbmpSource.Height);
        end;
      tbmpDest.SetSize(NewWidth, NewHeight);
      tbmpDest.Draw(tbmpDest.BoundsRect, tbmpSource.BoundsRect, tbmpSource);
      JpgImage :=TJPEGImage.Create;
      TempWinBmp := TBitmap.Create;
       try
         TempWinBmp.Assign(tbmpDest);
         JpgImage.CompressionQuality := 100; //Qualitätseinstellung...
         JpgImage.Assign(TempWinBmp);
         JpgImage.SaveToFile(DstFile);
       finally
         TempWinBmp.Free;
         JpgImage.Free;
       end;
      finally
      //Aufräumen :)
        tbmpDest.Free;
      end;
      finally
        tbmpSource.Free;
      end;
end
mfg phreax

bitsetter 10. Jul 2007 21:11

Re: image resizen??
 
Hi,

so würde es wohl auch gehen, die Qualität wird durch das Vergrößern allerdings auch nicht besser.
Delphi-Quellcode:
uses JPEG;

function StretchJpeg(Open, Save: AnsiString; Img: Timage): Boolean;
var
  Jpg : TJpegImage;
  Bmp: TBitmap;
begin
  Result:= false;
  if FileExists(Open) then
  begin
    Jpg := TJpegImage.Create;
    Bmp:= TBitmap.Create;
    try
      Jpg.LoadFromFile(Open);
      Bmp.PixelFormat:= pf24bit;
      Bmp.Assign(Jpg);
      Img.Picture.Bitmap.Width:= Img.Width;
      Img.Picture.Bitmap.Height:= Img.Height;
      SetStretchBltMode(Img.Picture.Bitmap.Canvas.Handle, STRETCH_HALFTONE);
      SetBrushOrgEx(Img.Picture.Bitmap.Canvas.Handle, 0, 0, nil);
      StretchBlt(Img.Picture.Bitmap.Canvas.Handle, 0, 0, Img.Width,
        Img.Height, Bmp.Canvas.Handle, 0, 0, Bmp.Width, Bmp.Height, srccopy);
      Jpg.Assign(Img.Picture.Bitmap);
      Jpg.CompressionQuality:= 95;
      Jpg.Compress;
      Jpg.SaveToFile(Save);
      Result:= true;
    finally
      Bmp.Free;
      Jpg.Free;
    end;
  end;

end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  StretchJpeg('c:\Bild.jpg', 'C:\BildTest.jpg', Image1);
end;


Alle Zeitangaben in WEZ +1. Es ist jetzt 22:44 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz