為了取出螢幕上某點畫素的顏色,常常使用gdi函式getpixel, 其原形如下:
colorref getpixel(
hdchdc
,// handle to dc
intnxpos
,// x-coordinate of pixel
intnypos
// y-coordinate of pixel
);
getpixel
的效率並不高,如果頻繁地使用將會造成軟體的反應速度。例如,畫板工具一般是單執行緒的架構,如果程式在做剛畫的線條反鋸齒優化處理的時候,使用者是無法繼續畫線條的,所以要求反鋸齒的演算法**執行速度非常高。而反鋸齒的演算法中需要取畫素的顏色的。
如果不用getpixel函式,能不能用另外的方法來取得某個畫素的顏色值?
可以的。思路如下:
取得畫布中的點陣圖資訊,計算畫素在位圖中對應的位置,即可取得顏色值。
如下功能只考慮32點陣圖的情況:
hbitmap getsrcbit(hdc hdc, dword bitwidth, dword bitheight)
bitmap bitmap; //
畫布的bmp的資訊
hbitmap hbmpdc = getsrcbit(hdc, dcrect.right, dcrect.bottom + 50); //
高度要比實際大一點,以免越界
getobject(hbmpdc, sizeof(bitmap), (lpstr)&bitmap);
void* lpbmpvoid = globalalloc(ghnd, bitmap.bmheight*bitmap.bmwidthbytes);
lpstr lpbmpstr = (lpstr)globallock(lpbmpvoid);
getbitmapbits(hbmpdc, bitmap.bmwidthbytes * bitmap.bmheight, lpbmpstr);
……………
…………..
offset = (bitmap.bmwidthbytes)*
nypos
+ nxpos
*(bitmap.bmbitspixel/8);
bgcolor = (*(dword *)(lpbmpstr + offset));
bgcolor = (bgcolor & 0xff00ff00) | ((bgcolor >> 16) & 0x000000ff) | ((bgcolor << 16) & 0x00ff0000);
……………
…………..
globalunlock(lpbmpvoid);
globalfree(lpbmpvoid);
deleteobject(hbmpdc);
bgcolor
取出的就是顏色值了。
如何獲取螢幕上各顏色的紅 綠 藍值
在桌面上執行各種程式中,有很多色彩十分靚麗,我們有時也想使用它們的顏色,但苦於沒有原始碼,所以很難準確知道它們的r g b顏色值。於是便產生了很多拾取螢幕顏色的工具,你想知道它們是怎麼用程式實現的麼?下面我就拿我用vc6.0做的乙個螢幕顏色拾取器的例項代ma 來告訴您,例項程式執行後的介面如下 基本...
螢幕長度與畫素長度的轉換
分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!最近要做乙個所見即所得的圖形編輯器,遇到了乙個問題 如果以畫素為單位在螢幕上畫了一條直線後,那麼如何知道它在螢幕上的物理長度?例如,假設我們在vc6中用嚮導新建乙個簡單的單文件程式pixertoinch,在它的ondraw函式中有如下 cpp vi...
七 設定1畫素邊框的顯示顏色
1.引入1畫素邊框的css檔案 border.css charset utf 8 border,border top,border right,border bottom,border left,border topbottom,border rightleft,border topleft,bor...