bitmap - 垂直翻转 VCL TImage 并拉伸
问题描述
以下代码从这里采用,在 TPaintbox 上翻转和绘制 TBitmap。
void flipImageVertically(Graphics::TBitmap *pBitmap, TPaintBox* paintBox)
{
int w = pBitmap->Width;
int h = pBitmap->Height;
TRect dest(getStretchedDimensions(w, h, paintBox->Width, paintBox->Height));
TRect src(Rect(0, h, w, 0));
Graphics::TBitmap *bmp;
bmp = new TBitmap;
bmp->PixelFormat = pBitmap->PixelFormat;
bmp->SetSize(w,h);
bmp->Canvas->Draw(0, 0, pBitmap);
paintBox->Canvas->CopyRect(dest, bmp->Canvas, src);
delete bmp;
}
但是,与仅将图像绘制并拉伸到画框的代码相比:
TRect stretchedRect(getStretchedDimensions(tbm->Width, tbm->Height, paintBox->Width, paintBox->Height));
paintBox->Canvas->StretchDraw(stretchedRect, tbm);
翻转的图像“闪闪发光”,看着饱和像素。我相信这与
bmp->Canvas->Draw(0, 0, pBitmap);
paintBox->Canvas->CopyRect(dest, bmp->Canvas, src);
不涉及“拉伸”绘制的代码行。
尝试将上述代码更改为使用拉伸绘制:
paintBox->Canvas->StretchDraw(dest, bmp);
而不是 CopyRect 不起作用。它仍然显示闪闪发光的像素,并且没有翻转。(刚刚意识到上面的代码水平翻转图像)。位图是 8 位灰度位图。
更新 将像素格式更改为 pf32Bit 确实可以解决大部分问题。然而,当拉伸到小于原始尺寸时,黑色“正方形”和其他图案会出现在图像的各个部分。见下文:
解决方案
推荐阅读
- python - 如何在 Flask 中设置最大挂起连接数
- java - Java - 在给出.class预期错误的方法中使用数组作为参数
- sql-server-2008-r2 - SQL Server 中 T-SQL 的奇怪行为
- c# - C# 四舍五入 1.998 到 1.9
- python - Pandas DataFrame:根据条件识别异常值并替换数据框中的值
- selenium - 处理“内部”滚动条时如何滚动到视图中
- tensorflow - 使用 TPU 训练 MNIST 会产生错误
- sql-server - SQL LEFT JOIN SUM 一对多
- excel - 升级到 Office 2013 后如何在任务计划程序中使用 Excel VBA 发送 Outlook 项目?
- docker - 父 docker 容器不会停止,我需要访问终端并运行我的命令