Avatar billede mcgoat Nybegynder
14. oktober 2003 - 08:23 Der er 1 kommentar og
1 løsning

Thumbnail af jpg

Jeg er ved at lave et program som skal kunne lave Thumbnails i str 50x50.. Jeg bruger et TJPEGImage som loader et billede og så vil jeg så gerne kunne lave og gemme et thumbnail af dette... hvordan gør jeg det?
Avatar billede athlon-pascal Juniormester
14. oktober 2003 - 15:10 #1
Brug Canvas.StretchDraw :-)
Syntaks:
procedure StretchDraw(const Rect: TRect; Graphic: TGraphic);
Avatar billede borrisholt Novice
15. oktober 2003 - 12:40 #2
unit JpegConv;

interface

uses Windows, Graphics, SysUtils, Classes;

procedure CreateThumbnail(const InFileName, OutFileName: string; Width, Height: Integer; Compress: Boolean = true; ProgressEvent : TProgressEvent = nil); overload;

implementation

uses Jpeg;

procedure CreateThumbnail(InStream, OutStream: TStream; Width, Height: Integer; Compress: Boolean; ProgressEvent : TProgressEvent); overload;
var
  JpegImage: TJpegImage;
  Bitmap: TBitmap;
  Ratio: Double;
  ARect: TRect;
  AHeight (*, AHeightOffset*): Integer;
  AWidth (*, AWidthOffset*): Integer;
begin
//  Check for invalid parameters
  JpegImage := TJpegImage.Create;
  try
//  Load the image
    JpegImage.LoadFromStream(InStream);
    if Width = 0 then
      Width := JpegImage.Width;
    if Height = 0 then
      Height := JpegImage.Height;

    // Create bitmap, and calculate parameters
    Bitmap := TBitmap.Create;
    try
      Ratio := JpegImage.Width / JpegImage.Height;
      if Ratio > 1 then
      begin
        AHeight := Round(Width / Ratio);
//        AHeightOffset:=(Height-AHeight) div 2;
        AWidth := Width;
//        AWidthOffset:=0;
      end
      else
      begin
        AWidth := Round(Height * Ratio);
//        AWidthOffset:=(Width-AWidth) div 2;
        AHeight := Height;
//        AHeightOffset:=0;
      end;

      Bitmap.Width := AWidth;
      Bitmap.Height := AHeight;
//      Bitmap.Canvas.Brush.Color:=FillColor;
//      Bitmap.Canvas.FillRect(Rect(0,0,Width,Height));
// StretchDraw original image
//      ARect:=Rect(AWidthOffset,AHeightOffset,AWidth+AWidthOffset,AHeight+AHeightOffset);
      ARect := Rect(0, 0, AWidth, AHeight);
      Bitmap.Canvas.StretchDraw(ARect, JpegImage);
// Assign back to the Jpeg, and save to the file
      JpegImage.Free;

      JpegImage := TJpegImage.Create;
      JpegImage.OnProgress := ProgressEvent;
      JpegImage.Assign(Bitmap);

      if Compress then
        JpegImage.CompressionQuality := 30;
     
      JpegImage.SaveToStream(OutStream);
    finally
      Bitmap.Free;
    end;
  finally
    JpegImage.Free;
  end;
end;

procedure CreateThumbnail(const InFileName, OutFileName: string; Width, Height: Integer; Compress: Boolean; ProgressEvent : TProgressEvent); overload;
var
  InStream, OutStream: TFileStream;
begin
  InStream := TFileStream.Create(InFileName, fmOpenRead);
  try
    OutStream := TFileStream.Create(OutFileName, fmOpenWrite or fmCreate);
    try
      CreateThumbnail(InStream, OutStream, Width, Height, Compress, ProgressEvent);
    finally
      OutStream.Free;
    end;
  finally
    InStream.Free;
  end;
end;

end.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester