在Delphi中使用正确的颜色进行CopyRect(缩放)
发布时间:2020-12-15 04:31:54 所属栏目:大数据 来源:网络整理
导读:在 this question中,我询问了CopyRect方法的正确用法.我得到了一个解决问题的答案,但现在复制的矩形的颜色是错误的(限制为256个值?). 这是代码: var Bmp: TBitmap;begin Image1.Picture.LoadFromFile(SomeJPGimage); Bmp := TBitmap.Create; try Bmp.Assig
在
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; 假色的插图是Image2.如果我不调整大小,颜色是正确的. 编辑 解决方法
这不是因为颜色减少或错误的像素格式等引起的.你可能在复制时缩小图像并且’StretchBlt’压缩图像以适应,并且根据模式,会产生一些伪像.例如,下面的128×128图像
如果未应用调整大小,则显示完全相同.但是,如果它应用于90×100图像,则输出为. 您可以更改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.ClipRect); finally Bmp.Free; end; end; 对于上面的源图片,输出现在变为: (浏览过一些’graphics.pas’,VCL似乎只对8位图像使用半色调.我在这个评估中可能是错的或者是正确的,但无论如何,半色调拉伸模式没有这样的约束.) 对于任何更好的东西,我相信,你必须使用适当的图形库. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |