gpt4 book ai didi

delphi - 在 Delphi 中使用正确的颜色复制矩形(缩放)

转载 作者:行者123 更新时间:2023-12-03 14:58:58 25 4
gpt4 key购买 nike

this question我问的是CopyRect方法的正确使用。我得到了解决我的问题的答案,但现在复制的矩形的颜色是错误的(仅限于 256 个值?)。这是代码:

var
Bmp: TBitmap;
begin
Image1.Picture.LoadFromFile(SomeJPGimage);

Bmp := TBitmap.Create;
try
Bmp.Assign(Image1.Picture.Graphic);
with Bmp do
Image2.Canvas.CopyRect(Image2.Canvas.ClipRect, Canvas, Canvas.ClipRect);
finally
Bmp.Free;
end;
end;

enter image description here

带有假色的插图是 Image2。如果我不调整大小,颜色就是正确的。
调整大小时如何获取源图像(JPG)的 24 位颜色?

编辑
平局不是一种选择,而是一种选择。我想复制部分源图像的缩放版本。

最佳答案

这不是由于颜色减少或错误的像素格式等引起的。您可能在复制时缩小图像,并且“StretchBlt”压缩图像以适应,并且根据模式,会产生一些伪影。例如下面的 128x128 图像

    enter image description here

如果未应用调整大小,

的显示效果完全相同。但是,如果将其应用于 90x100 图像,则输出为

   enter image description here .

您可以更改 stretching mode为了获得稍微好一点的结果:

var
Bmp: TBitmap;
begin
Image1.Picture.LoadFromFile(SomeJPGimage);

Bmp := TBitmap.Create;
try
Bmp.Assign(Image1.Picture.Graphic);

SetStretchBltMode(Image2.Canvas.Handle, HALFTONE); // <- here

with Bmp do
Image2.Canvas.CopyRect(Image2.Canvas.ClipRect, Canvas, Canvas.ClipRect);
finally
Bmp.Free;
end;
end;


对于上面的源图片,输出现在变为:

enter image description here

(浏览了一些“graphics.pas”后,VCL似乎只对8位图像使用半色调。我的评估可能是错误的或正确的,但无论如何,半色调拉伸(stretch)模式没有这样的限制。 )


我相信,为了获得更好的效果,您必须使用适当的图形库。

关于delphi - 在 Delphi 中使用正确的颜色复制矩形(缩放),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8366547/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com