
可以利用原生态的API方法来实现,通过GetDC获取屏幕DC,然后通过GetPixel获取点的颜色。代码如下:
/// <summary>/// </summary>
/// <param name="hwnd">将获取其设备场景的窗口的句柄。若为0,则要获取整个屏幕的DC</param>
/// <returns>指定窗口的设备场景句柄,出错则为0</returns>
[DllImport("user32dll")]
public static extern IntPtr GetDC(IntPtr hwnd);
/// <summary>
/// 释放由调用GetDC函数获取的指定设备场景
/// </summary>
/// <param name="hwnd">要释放的设备场景相关的窗口句柄</param>
/// <param name="hdc">要释放的设备场景句柄</param>
/// <returns>执行成功为1,否则为0</returns>
[DllImport("user32dll")]
public static extern Int32 ReleaseDC(IntPtr hwnd, IntPtr hdc);
/// <summary>
/// 在指定的设备场景中取得一个像素的RGB值
/// </summary>
/// <param name="hdc">一个设备场景的句柄</param>
/// <param name="nXPos">逻辑坐标中要检查的横坐标</param>
/// <param name="nYPos">逻辑坐标中要检查的纵坐标</param>
/// <returns>指定点的颜色</returns>
[DllImport("gdi32dll")]
public static extern uint GetPixel(IntPtr hdc, int nXPos, int nYPos);
使用:
public Color GetColor(int x, int y)
{
IntPtr hdc = GetDC(IntPtrZero); uint pixel = GetPixel(hdc, x, y);
ReleaseDC(IntPtrZero, hdc);
Color color = ColorFromArgb((int)(pixel & 0x000000FF), (int)(pixel & 0x0000FF00) >> 8, (int)(pixel & 0x00FF0000) >> 16);
return color;
}
CODE SEGMENT
ASSUME CS:CODE
MSG DB 'hello I am 720'
N EQU $-MSG
START: PUSH CS
POP DS
PUSH CS
POP ES
MOV AH,2
MOV DH,12
MOV DL,37
INT 10H
MOV CX,N
LEA SI,MSG
@1:
PUSH CX
MOV AH,9
MOV AL,[SI]
MOV BL,0CFH
MOV CX,1
INT 10H
INC SI
MOV AH,3
INT 10H
MOV AH,2
INC DL
INT 10H
POP CX
LOOP @1
MOV AH,4CH
INT 21H
CODE ENDS
END START
DATA SEGMENT
DB 41H, 0CAH, 42H, 0CAH, 43H, 0CAH, 44H, 0CAH
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE, DS:DATA
START:
MOV AX, DATA
MOV DS, AX
MOV AX, 0B800H
MOV ES, AX
MOV DI, (12 160 + 2 30) ;在第12行、30列显示
MOV BX, 0
MOV CX, 4
S:
MOV AX, [BX]
MOV ES:[DI], AX
ADD DI, 2
ADD BX, 2
LOOP S
;S2: NOP
; JMP SHORT S2
MOV AX, 4C00H
INT 21H
CODE ENDS
END START
以上就是关于C#获取屏幕指定像素颜色值全部的内容,包括:C#获取屏幕指定像素颜色值、用汇编语言循环指令在屏幕中间输出红底白字的“hello I am 720"、汇编实现在dos屏幕上显示带颜色的ABCD,错在哪里怎么没有字显示出来等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)