作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我想在 KOL 中将 TBitMap 转换为 PBitMap。
我试过这个,但我得到一张黑色图片作为输出:
function TbitMapToPBitMap (bitmap : TBitMap) : PbitMap;
begin
result := NIL;
if Assigned(bitmap) then begin
result := NewBitmap(bitmap.Width, bitmap.Height);
result.Draw(bitmap.Canvas.Handle, bitmap.Width, bitmap.Height);
end;
end;
function TbitMapToPBitMap (const src : TBitMap; var dest : PBitMap) : Bool;
begin
result := false;
if (( Assigned(src) ) and ( Assigned (dest) )) then begin
dest.Draw(src.Canvas.Handle, src.Width, src.Height);
result := true;
end;
end;
procedure TForm1.Button1Click(Sender: TObject);
var
TBitMapTest : TBitMap;
PBitMapTest : PBitMap;
begin
TBitMapTest := TBitMap.Create;
TBitMapTest.LoadFromFile ('C:\test.bmp');
PBitMapTest := NewBitMap (TBitMapTest.Width, TBitMapTest.Height);
TbitMapToPBitMap (TBitMapTest, PBitMapTest);
PBitMapTest.SaveToFile ('C:\test2.bmp');
PBitMapTest.Free;
TBitMapTest.Free;
end;
最佳答案
要回答您的问题,为什么您的目标图像是黑色的;这是因为您将这些目标图像绘制为源图像和黑色它们是因为 NewBitmap
将图像初始化为黑色。
如果您想要 TBitmap
,如何复制或转换给KOL PBitmap
我只找到了一种方法(可能是我错过了KOL中的这种功能,但即使是这样,下面代码中使用的方法也很有效)。您可以使用 Windows GDI 函数进行位 block 传输, BitBlt
,它只是将指定区域从一个 Canvas 复制到另一个 Canvas 。
下面的代码,当你点击按钮创建VCL和KOL位图实例,将图像加载到VCL位图,调用VCL到KOL位图复制函数,如果这个函数成功,将KOL位图绘制到表单 Canvas 并释放两个位图实例:
uses
Graphics, KOL;
function CopyBitmapToKOL(Source: Graphics.TBitmap; Target: PBitmap): Boolean;
begin
Result := False;
if Assigned(Source) and Assigned(Target) then
begin
Result := BitBlt(Target.Canvas.Handle, 0, 0, Source.Width, Source.Height,
Source.Canvas.Handle, 0, 0, SRCCOPY);
end;
end;
procedure TForm1.Button1Click(Sender: TObject);
var
KOLBitmap: PBitmap;
VCLBitmap: Graphics.TBitmap;
begin
VCLBitmap := Graphics.TBitmap.Create;
try
VCLBitmap.LoadFromFile('d:\CGLIn.bmp');
KOLBitmap := NewBitmap(VCLBitmap.Width, VCLBitmap.Height);
try
if CopyBitmapToKOL(VCLBitmap, KOLBitmap) then
KOLBitmap.Draw(Canvas.Handle, 0, 0);
finally
KOLBitmap.Free;
end;
finally
VCLBitmap.Free;
end;
end;
关于delphi - TBitMap 到 PBitMap KOL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11170595/
我想在 KOL 中将 TBitMap 转换为 PBitMap。 我试过这个,但我得到一张黑色图片作为输出: function TbitMapToPBitMap (bitmap : TBitMap) :
我有一个保存在字符串中的 jpeg 文件。我想将字符串加载/分配给 Delphi7 中的 TImage。我用KOL对于以下代码: var ImageStream : PStream; ImageS
我是一名优秀的程序员,十分优秀!