Bild ist BMP mit olivgrüner transparenter Farbe.Wie kann man das transparente Bild in graphisc32 richtig skalieren?
type
TForm1 = class(TForm)
ImageList: TImageList; //
MainMenu: TMainMenu; //Standart parameters
MenuItem: TMenuItem; //
procedure FormCreate(Sender: TObject);
...
function ScaleImage(aImage: TBitmap): TBitmap;
var
Src, Dst: TBitmap32;
R: TKernelResampler;
begin
Src := TBitmap32.Create;
Src.SetSize(16, 16);
Src.DrawMode := dmTransparent;
Src.OuterColor := clOlive;
Src.Assign(aImage);
Dst := TBitmap32.Create;
Dst.SetSize(24,24);
R := TKernelResampler.Create(Src);
R.Kernel := TLanczosKernel.Create;
Dst.DrawMode := dmTransparent;
Dst.OuterColor := clOlive;
Dst.Draw(Dst.BoundsRect, Src.BoundsRect, Src);
Result.Assign(Dst);
end;
procedure AddImage;
var
Image: TBitmap;
begin
Image := TBitmap.Create;
Image.LoadFromResourceName(hInstance, 'BMPNOFILTER');
ImageList.AddMasked(ScaleImage(Image), clOlive);
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
AddImage;
MainMenu.Images := ImageList;
MenuItem.ImageIndex := 0;
end;
Nach diesem Ergebnis TBitmap
zu Abbildungsliste TImageList
mit Imagelist.AddMasked(Result, clOlive);
aber Bild ist mit Oliven Farbe gezeichnet. Versuchen, Größe des Bildes ohne Olive Farbe (aImage.transparent := True;
), nach Zuordnung Src Hintergrund werden schwarz und verwenden Sie es als transparente Farbe, OuterColor
Wert zu ignorieren.
Tryed ClOlive32 als OuterColor
. Ergebnis:
-Code i verwendet:
var
R: TKernelResampler;
Src, Dst: TBitmap32;
fImage: TBitmap;
OriginalImage, TranOriginalImage: TImage //16x16
SrcImage, DstImage, ResultImage: TImage //24x24
...
fImage := TBitmap.Create;
fImage.LoadFromResourceName(hInstance, 'BMPNOFILTER');
OriginalImage.Picture.Bitmap := fImage;
fImage.Transparent := True;
fImage.TransparentColor := clOlive;
TranOriginalImage.Picture.Bitmap := fImage;
TranOriginalImage.Transparent := True;
Src := TBitmap32.Create;
Src.SetSize(16, 16);
Src.OuterColor := clOlive32;
Src.Assign(fImage);
Src.DrawMode := dmTransparent;
Src.OuterColor := clOlive32;
SrcImage.Picture.Bitmap.Assign(Src);
Dst := TBitmap32.Create;
Dst.SetSize(24, 24);
Dst.DrawMode := dmTransparent;
Dst.OuterColor := clOlive32;
R := TKernelResampler.Create(Src);
R.Kernel := TLanczosKernel.Create;
Dst.Draw(Dst.BoundsRect, Src.BoundsRect, Src);
DstImage.Picture.Bitmap.Assign(Dst);
ResultImage.Picture.Bitmap.Assign(Dst);
ResultImage.Transparent := True;
Können Sie bitte echten Code zeigen? Wir können zum Beispiel nicht sagen, ob Src, Dst, aImage Parameter, Globals, Locals oder Objektmitglieder sind. Bitte geben Sie uns ein kleines, kompilierbares Programm, das Ihr Problem zeigt. – Dsm
Ich habe den Code aktualisiert. – Andrey
Kann [diese Frage] (https://stackoverflow.com/a/32269633/5043424) Ihnen helfen? –