使用 EASYX 载入PNG图并透明背景
EASYX库下载地址 我这里用的是测试版(2019-5-29更新),如下图 该版本可以插入PNG图片,但不能做到去透明化,如下图: 虽然我的png图载入了,但是透明部分也会变成黑色,明显没有透明化,下面就是解决这个问题的方法。
#include
#include
//函数声明
void drawAlpha(IMAGE* picture, int picture_x, int picture_y); //x为要载入图片的X坐标,y为Y坐标
void main()
{
initgraph(700, 700, NOMINIMIZE); // 初始化绘图环境,EASYX自带,现定义绘图区分辨率700x700
setbkcolor(WHITE); //用于设置当前绘图背景色,EASYX自带
cleardevice(); //是用当前背景色清空屏幕,并将当前点移至 (0, 0),EASYX自带
IMAGE img;
loadimage(&img, _T("B.PNG") ); //用于从文件中读取图像,EASYX自带
drawAlpha(&img,100,100); // 载入PNG图并去透明部分
_getch();
}
// 载入PNG图并去透明部分
void drawAlpha(IMAGE* picture, int picture_x, int picture_y) //x为载入图片的X坐标,y为Y坐标
{
// 变量初始化
DWORD *dst = GetImageBuffer(); // GetImageBuffer()函数,用于获取绘图设备的显存指针,EASYX自带
DWORD *draw = GetImageBuffer();
DWORD *src = GetImageBuffer(picture); //获取picture的显存指针
int picture_width = picture->getwidth(); //获取picture的宽度,EASYX自带
int picture_height = picture->getheight(); //获取picture的高度,EASYX自带
int graphWidth = getwidth(); //获取绘图区的宽度,EASYX自带
int graphHeight = getheight(); //获取绘图区的高度,EASYX自带
int dstX = 0; //在显存里像素的角标
// 实现透明贴图 公式: Cp=αp*FP+(1-αp)*BP , 贝叶斯定理来进行点颜色的概率计算
for (int iy = 0; iy
int srcX = ix + iy * picture_width; //在显存里像素的角标
int sa = ((src[srcX] & 0xff000000) >> 24); //0xAArrggbb;AA是透明度
int sr = ((src[srcX] & 0xff0000) >> 16); //获取RGB里的R
int sg = ((src[srcX] & 0xff00) >> 8); //G
int sb = src[srcX] & 0xff; //B
if (ix >= 0 && ix = 0 && iy |