为何StretchBlt()将图片缩小 颜色会不对

為何StretchBlt()將圖片縮小 顏色會不對 


在window中要貼圖常用到StretchBlt() function
然而這function 有個問題 就是圖片縮小時 顏色會錯誤
這個問題很好解 只需要呼叫SetStretchBltMode() 即可
      CPaintDC dc;
      CDC sdc;
      // 圖片的載入放中間

      dc.SetStretchBltMode(STRETCH_DELETESCANS);
      dc.StretchBlt(0,0,100,100,&sdc,0,0,100,100,SRCCOPY);

先解釋一下StretchBlt() 的作用模式
當StrecthBlt() 的目標比來源小時 必須要將一些點去掉
他的預設做法 是將要去掉的點與旁邊的點做AND運算
這也就是為什麼 顏色會錯誤的原因
至於為什麼預設做法是要用AND運算呢
這是因為 如果這張圖是黑底白字的話 如果要砍點 則會有可能把字的線條給砍掉
這樣縮小之後的圖 上面的文字便會壞掉
如果是使用AND運算的話 便可以保留上面的文字
不過缺點就是圖的顏色會錯掉


我們可以使用SetStretchBltMode() 將處理方法改成STRETCH_DELETESCANS
這樣他便會直接將不要的點給砍掉 就不會有顏色錯誤的問題發生
另外 也可以換成 STRETCH_HALFTONE
half tone 會將要刪掉的像素跟周圍中和起來
這樣可得到較好的畫質 不過速度也會變慢

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值