【发布时间】:2014-01-30 17:28:06
【问题描述】:
我正在尝试在普通 (TBitmap) 图像上绘制包含一些完全透明和部分透明像素的源图像 (GR32 TBitmap32),同时保留源图像中的透明度。
我用这个:
BMP32.DrawTo(BMP.Canvas.Handle, 0, 0);
但图像不是透明绘制的。
代码:
一切都很基本:我有一个背景位图(Bkg),在应用程序启动时我会在其中加载一个图像。
然后在应用程序中,我从磁盘加载第二张图像(具有透明度的图像)并将其绘制在背景上。
var Bkg: TBitmap;
procedure TfrmPhoto.FormCreate(Sender: TObject);
begin
Bkg:= LoadGraphEx(GetAppDir+ 'bkg.bmp'); { Load bitmap from file }
{
Bkg.Transparent:= TRUE;
Bkg.PixelFormat:= pf32bit;
Bkg.TransparentColor:= clPink;
}
end;
procedure TfrmPhoto.Apply2;
VAR
Loader: TBitmap;
BMP32: tbitmap32;
begin
BMP32:= TBitmap32.Create;
TRY
Loader:= TBitmap.Create;
TRY
Loader.LoadFromFile('c:\Transparent.BMP');
BMP32.Assign(Loader);
FINALLY
FreeAndNil(Loader);
END;
{ Mix images }
BMP32.DrawTo(Bkg.Canvas.Handle, 0, 0); <----- The problem is here
imgPreview.Picture.Assign(Bkg); { This is a TImage where I see the result }
FINALLY
FreeAndNil(BMP32);
END;
end;
【问题讨论】:
-
申请SSCCE会不会太过分了?
-
请编辑您的问题:添加您的 Delphi 版本的标签,并展示您如何为每像素 32 位库存 TBitmap 启用和设置透明模式
-
添加了源代码。 LoadGraphEx 可以替换为 LoadFromFile('')。否则,项目应该是可编译的。
-
感谢您的更新,+1
-
在 GR32 中有一个例子,他们在背景上绘制了一个旋转的图像。但是,他们也使用 bitmap32 作为背景!他们不像我那样将位图与 bitmap32 结合起来。我不知道我应该如何(透明地)组合这两个图像。此外,我在他们的示例中找不到有关如何执行此操作的具体示例。
标签: delphi graphics32