Как изменить размер TWICImage
без потери прозрачности?Я использую метод JclGraphics.Resize()
, параметр которого TBitmap
.Прозрачность теряется в методе TBitmap.Assign()
.
В этом случае изображение имеет значок типа.Но в другом случае это может быть другой тип изображения.
uses
jclGraphics, ShellApi, UrlMon;
procedure ResizeImageStream(AStream: TMemoryStream; AWidth, AHeight: Integer);
var
WicImage: TWicImage;
Bitmap1: TBitmap;
begin
WicImage := TWicImage.Create;
try
WicImage.LoadFromStream(AStream);
if ((WicImage.Width > 32) or (WicImage.Height > 32)) then begin
Bitmap1 := TBitmap.Create;
try
Bitmap1.Assign(WicImage);
Bitmap1.Transparent := True;
Bitmap1.TransparentColor := clBlack;
Stretch(AWidth, AHeight, rfMitchell, 0, Bitmap1);
WicImage.Assign(Bitmap1);
AStream.Clear;
WicImage.SaveToStream(AStream);
finally
FreeAndNil(Bitmap1);
end;
end;
finally
WicImage.Free;
end;
end;
procedure ResizeImageFile(AFileNameSrc, AFileNameDsc: String; AWidth, AHeight: Integer);
var
Stream: TMemoryStream;
begin
Stream := TMemoryStream.Create;
try
Stream.LoadFromFile(AFileNameSrc);
ResizeImageStream(stream, AWidth, AHeight);
if FileExists(AFileNameDsc) then
DeleteFile(AFileNameDsc);
Stream.SaveToFile(AFileNameDsc);
finally
Stream.Free;
end;
end;
procedure TForm4.FormCreate(Sender: TObject);
begin
URLDownloadToFile(nil, PChar('https://www.shell.cz/apps/settings/wcm/designs/shell-rio/clientlibs/themes/theme-shell/resources/favicon/favicon.ico'),
PChar('C:\p\favicon.ico'), 0, nil);
ResizeImageFile('C:\p\favicon.ico', 'C:\p\favicon_32.ico', 32, 32);
end;