透明贴图出现扭曲、部分黑边

0

使用该文章 https://codeabc.cn/yangw/a/transparent-putimage 中的最后两中方法进行透明贴图出现略微扭曲、黑边的情况。

编译环境: VS2019、EasyX 2021-1-15 版本、 Debug(Releaes)x86(x64)均有问题。

测试图片链接:https://ss3.bdstatic.com/70cFv8Sh_Q1YnxGkpoWK1HF6hhy/it/u=2703781708,1566182711&fm=26&gp=0.jpg

下载该图片后直接将后缀名改为 png 即可(原本就是 .png 的说)

请注意观察图片右上角 “新春限定”,主要问题出在这里。

已经使用控制变量法排除以下可能因素:

(1)Debug / Release   X86 / X64;

(2)文章中的倒数第一或者倒数第二种方法;

(3)使用loadimage时是否放缩图片;

(4)是否使用批绘制,以及在循环中使用FlushBatchDraw或使用EndBatchDraw;

(5)窗口的背景颜色。

因无法插入图片来展示实验得出一些结论,所以提供以下信息:

(1)图片在第二次绘制(同一个地方)时,右上角的 “新春专属” 略微扭曲;

(2)第五次绘制时,可以看出,第九次左右逐渐明显,绘制次数越多,越明显;

(3)每次循环改变一次绘图位置,连续绘制九次,九张图片无扭曲痕迹;

(4)在循环中插入 cleardivice 函数,同一地点连续绘图,无扭曲。

测试代码如下:

transparentimage函数为文章中最后两种方法中的任意一种。

int main()
{
	initgraph(960, 640);
	setbkcolor(WHITE);
	cleardevice();

	IMAGE image{};
	loadimage(&image, _T("image.png"));

	BeginBatchDraw();
	while (true)
	{
		transparentimage(NULL, 0, 0, &image);
		FlushBatchDraw();
		Sleep(10);
	}

	EndBatchDraw();

	system("pause");
	return 0;
}
ava
慢热友人.

2021-2-23

0

这是你代码的问题。

你的图片存在半透明的部分,而你的代码中,是循环贴图,循环次数多了,半透明经过一次次叠加,就会变为不透明,最终呈现你说的情况。

你可以看看教程 https://codeabc.cn/yangw/a/transparent-putimage 的第五种方法,代入一个半透明像素,计算一下反复执行后是什么值。

ava
慢羊羊

2021-2-23