Saya ingin tanya nich, gimana caranya melakukan konversi dari bmp dari segala ukuran ( misalnya : 100 x 50 pixel atau 600 x 300 pixel ) ke bentuk mini (spt thumbnail) ? [Agus, Jakarta]
Jawaban
Caranya kelihatannya bisa bermacam-macam. Ini saya coba berikan salah
satu cara yang sederhana.
procedure CreateThumbnail(SrcBmp, DestBmp: TBitmap;
ProportionalResize: Boolean);
var
PropWidth, PropHeight: Integer;
begin
if ProportionalResize then
begin
// mencari ukuran TxL yang proporsional
if SrcBmp.Width/DestBmp.Width < SrcBmp.Height/DestBmp.Height
then
begin
PropWidth := SrcBmp.Width;
PropHeight := PropWidth * DestBmp.Height div DestBmp.Width;
end else
begin
PropHeight := SrcBmp.Height;
PropWidth := PropHeight * DestBmp.Width div DestBmp.Height;
end;
end else
begin
PropWidth := SrcBmp.Width;
PropHeight := SrcBmp.Height;
end;
// dibawah ini kalau nggak mau ber-WinAPI, bisa pakai
// method TCanvas.StretchDraw(), tentunya dengan parameter
// yang berbeda
if not StretchBlt(DestBmp.Canvas.Handle, 0, 0,
DestBmp.Width, DestBmp.Height,
SrcBmp.Canvas.Handle, 0, 0, PropWidth, PropHeight,
SRCCOPY)
then
RaiseLastWin32Error;
end;
procedure TForm1.Button1Click(Sender: TObject);
var
SrcBmp, DestBmp: TBitmap;
begin
SrcBmp := TBitmap.Create;
try
SrcBmp.LoadFromFile('C:\BigSizeBitmap.bmp');
DestBmp := TBitmap.Create;
try
// dimensi thumbnail
DestBmp.Width := 16;
DestBmp.Height := 16;
CreateThumbnail(SrcBmp, DestBmp, True);
// misalnya thumbnail dipakai sebagai glyph
// pada TSpeedButton...
SpeedButton1.Glyph.Assign(DestBmp);
finally
DestBmp.Free;
end;
finally
SrcBmp.Free;
end;
end;
Salam
- hans -
Tidak ada komentar:
Posting Komentar