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?
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.