取出螢幕上某個畫素的顏色值

2021-04-16 00:34:02 字數 1530 閱讀 5239

為了取出螢幕上某點畫素的顏色,常常使用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...