为了账号安全,请及时绑定邮箱和手机立即绑定

putimage是可以的,但是有黑色边框,这怎么整?

putimage是可以的,但是有黑色边框,这怎么整?

C
慕斯王 2023-04-24 21:17:57
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就打印不出来图片了?
查看完整描述

1 回答

?
精慕HU

TA贡献1845条经验 获得超8个赞

根据代码,可以看出 rotateimage() 函数调用后,car_r + 1 图片的指针已经被修改,如果直接传入 drawImg() 函数中,可能会导致指针的位置出错,因此导致无法正确打印图片。而 putimage() 函数是直接将图像输出到屏幕上,不需要传入指针,因此不会受到指针位置的影响。
解决这个问题可以有以下两种方法:
1.重新将旋转后的图片指针赋值给一个新的指针变量,然后将这个新的指针变量作为参数传递给 drawImg() 函数。例如:
IMAGE* rotated_cars = new IMAGE;
rotateimage(rotated_cars, cars + 2, -0.54, false, true);
drawImg(player.x, player.y, rotated_cars);
2.在 drawImg() 函数内部,先将原始的图片指针保存下来,然后再对指针进行操作。例如:
void drawImg(int x, int y, IMAGE* src)
{
// 变量初始化
DWORD* pwin = GetImageBuffer(); //窗口缓冲区指针
DWORD* psrc = GetImageBuffer(src); //图片缓冲区指针
DWORD* psrc_original = psrc; // 保存原始的图片指针
// ...

// 实现透明贴图
for (int iy = 0; iy < real_h; iy++)
{
for (int ix = 0; ix < real_w; ix++)
{
byte a = (byte)(psrc[ix] >> 24);
if (a > 100)
{
pwin[ix] = psrc[ix];
}
}
// 换到下一行
pwin += win_w;
psrc += src_w;
}

// 恢复原始的图片指针
psrc = psrc_original;
}


查看完整回答
反对 回复 2023-04-27
  • 1 回答
  • 0 关注
  • 303 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信