void drawImg(int x, int y, IMAGE* src)
{
// 变量初始化
DWORD* pwin = GetImageBuffer(); //窗口缓冲区指针
DWORD* psrc = GetImageBuffer(src); //图片缓冲区指针
int win_w = getwidth(); //窗口宽高
int win_h = getheight();
int src_w = src->getwidth(); //图片宽高
int src_h = src->getheight();
// 计算贴图的实际长宽
int real_w = (x + src_w > win_w) ? win_w - x : src_w; // 处理超出右边界
int real_h = (y + src_h > win_h) ? win_h - y : src_h; // 处理超出下边界
if (x < 0) { psrc += -x; real_w -= -x; x = 0; } // 处理超出左边界
if (y < 0) { psrc += (src_w * -y); real_h -= -y; y = 0; } // 处理超出上边界
// 修正贴图起始位置
pwin += (win_w * y + x);
// 实现透明贴图
for (int iy = 0; iy < real_h; iy++)
{
for (int ix = 0; ix < real_w; ix++)
{
byte a = (byte)(psrc[ix] >> 24);//计算透明通道的值[0,256) 0为完全透明 255为完全不透明
if (a > 100)
{
pwin[ix] = psrc[ix];
}
}
//换到下一行
pwin += win_w;
psrc += src_w;
}
}
rotateimage(car_r + 1, cars + 2, -0.54, false, true);
drawImg(player.x, player.y, car_r + 1);
putimage(player.x, player.y, car_r + 1);
drawImg()是用于去除图片黑色边框的函数,为什么用了rotateimage()旋转图片角度之后,drawImg就打印不出来图片了?但是putimage是可以的,但是有黑色边框。
但是rotateimage()就是把cars + 2旋转之后存到了car_r + 1里面啊?
追答rotateimage()函数确实将旋转后的图像数据存储在了car_r + 1这个IMAGE对象中,而drawImg()函数也应该能够正确地处理这个IMAGE对象。
因此,如果您在调用drawImg()函数时,看不到图像,请检查以下几个可能的问题:
检查x和y参数是否正确传递到了drawImg()函数。您可以在调试过程中添加一些输出语句来确认这一点。
检查car_r + 1这个IMAGE对象是否被正确地加载了图像数据。您可以在调试过程中使用getImageSize()函数来获取该IMAGE对象的宽度和高度,以确保它们的值是正确的。
检查您的绘图代码是否正确地设置了图形环境。例如,您可能需要在调用drawImg()函数之前,先调用setbkmode(TRANSPARENT)函数来设置背景透明。