イメージはオリーブ透明色のbmpです。その結果TBitmap
後graphisc32の透過イメージのサイズを正しく変更する方法は?
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;
Imagelist.AddMasked(Result, clOlive);
でTImageList
をイメージリストするが、画像はオリーブ色で描画されます。 オリーブ色(aImage.transparent := True;
)を使用せずに画像のサイズを変更しようとすると、Src背景が黒になり、透明色として使用され、OuterColor
の値は無視されます。
試しclOlive32をOuterColor
としました。結果:
私が使用したコード:
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;
実際のコードを表示できますか?たとえば、Src、Dst、aImageがパラメータ、グローバル、ローカルまたはオブジェクトメンバであるかどうかを判断することはできません。あなたの問題を示す小さな、コンパイル可能なプログラムを私たちに教えてください。 – Dsm
私はコードを更新しました。 – Andrey
[この質問](https://stackoverflow.com/a/32269633/5043424)でお手伝いできますか? –