亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

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 關注
  • 445 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號