如何获取屏目上任意一点的颜色值?

jxgzay 2005-04-21 10:17:04
现有图片颜色做参照,想在VB背景或前景设置成相同颜色.
如何获取颜色值呢?
...全文
115 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
jxgzay 2005-04-22
  • 打赏
  • 举报
回复
谢谢各位!
我通过大家提示,获取了PictureBox 任一点的颜色,一个PictureBox放置一幅图片,两个TextBox,在图片框内移动属标即可.
Private Declare Function GetPixel Lib "gdi32" (ByVal hdc As Long, ByVal X As Long, ByVal Y As Long) As Long


Private Sub Picture1_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
On Error Resume Next
l = GetPixel(Picture1.hdc, X / 15, Y / 15)
Text1.BackColor = l
Text2.Text = "当前颜色:&H" & Hex(l)
End Sub
MmMVP 2005-04-21
  • 打赏
  • 举报
回复
还有, MmMVP代码只能得到按钮表面的颜色
=========================================
只要保持窗体焦点,按回车也可以的^_^
laviewpbt 2005-04-21
  • 打赏
  • 举报
回复
还有, MmMVP代码只能得到按钮表面的颜色
呵呵

Option Explicit
Private Declare Function GetCursorPos Lib "user32" (lpPoint As POINTAPI) As Long
Private Declare Function GetDC Lib "user32" (ByVal hwnd As Long) As Long
Private Declare Function GetPixel Lib "gdi32" (ByVal hdc As Long, ByVal x As Long, ByVal y As Long) As Long
Private Declare Function ReleaseDC Lib "user32" (ByVal hwnd As Long, ByVal hdc As Long) As Long

Private Type POINTAPI
x As Long
y As Long
End Type

Dim pt As POINTAPI


Private Sub Timer1_Timer()
Dim color As Long, r As Long, g As Long, b As Long
Dim hwnd As Long
Call GetCursorPos(pt)
hwnd = GetDC(0)
color = GetPixel(hwnd, pt.x, pt.y)
GetRGB color, r, g, b
Text1.Text = r
Text2.Text = g
Text3.Text = b
ReleaseDC hwnd, 0
End Sub
'得到一副图像的r,g.b只值
Private Sub GetRGB(ByVal Col As Long, ByRef r As Long, ByRef g As Long, ByRef b As Long)
r = Col Mod 256
g = ((Col And &HFF00&) \ 256&) Mod 256&
b = (Col And &HFF0000) \ 65536
End Sub
laviewpbt 2005-04-21
  • 打赏
  • 举报
回复
最好不要运行上面的代码!
没有releasedc
小心你的WINDOWS罢工
呵呵
MmMVP 2005-04-21
  • 打赏
  • 举报
回复
汗。。忘了releasedc

Declare Function ReleaseDC Lib "user32" Alias "ReleaseDC" (ByVal hwnd As Long, ByVal hdc As Long) As Long
MmMVP 2005-04-21
  • 打赏
  • 举报
回复
Option Explicit
Private Declare Function GetCursorPos Lib "user32" (lpPoint As POINTAPI) As Long
Private Declare Function GetDC Lib "user32" (ByVal hwnd As Long) As Long
Private Declare Function GetPixel Lib "gdi32" (ByVal hdc As Long, ByVal x As Long, ByVal y As Long) As Long

Private Type POINTAPI
x As Long
y As Long
End Type

Private Sub Command1_Click()
Dim pt As POINTAPI
Dim Fhwnd As Long
Call GetCursorPos(pt)
Fhwnd = GetDC(0)
MsgBox GetPixel(Fhwnd, pt.x, pt.y)
End Sub
gamestory 2005-04-21
  • 打赏
  • 举报
回复
用API函数
先GetDesktopDC,获得桌面的DC
在Bitblt,将桌面图象拷贝到一个PIctureBox里
再根据鼠标位置用Getpixel获得当前位置的颜色
 本次课程会带着大家学习Hash算法,从源码的角度去学习算法,更加容易理解的方式去学习,能够更高效的吸收学到的内容,也能培养出能够独自看源码,分析源码的能力。Hash,一般翻译做“散列”,也有直接音译为“哈希”的,就是把任意长度的输入(又叫做预映射, pre-image),通过散列算法,变换成固定长度的输出,该输出就是散列。这种转换是一种压缩映射,也就是,散列的空间通常远小于输入的空间,不同的输入可能会散列成相同的输出,而不可能从散列来唯一的确定输入。简单的说就是一种将任意长度的消息压缩到某一固定长度的消息摘要的函数。  哈希表是根据设定的哈希函数H(key)和处理冲突方法将一组关键字映射到一个有限的地址区间上,并以关键字在地址区间中的象作为记录在表中的存储位置,这种表称为哈希表或散列,所得存储位置称为哈希地址或散列地址。作为线性数据结构与表格和队列等相比,哈希表无疑是查找速度比较快的一种。  通过将单向数学函数(有时称为“哈希算法”)应用到任意数量的数据所得到的固定大小的结果。如果输入数据中有变化,则哈希也会发生变化。哈希可用于许多操作,包括身份验证和数字签名。也称为“消息摘要”。  简单解释:哈希(Hash)算法,即散列函数。它是一种单向密码体制,即它是一个从明文到密文的不可逆的映射,只有加密过程,没有解密过程。同时,哈希函数可以将任意长度的输入经过变化以后得到固定长度的输出。哈希函数的这种单向特征和输出数据长度固定的特征使得它可以生成消息或者数据。

7,765

社区成员

发帖
与我相关
我的任务
社区描述
VB 基础类
社区管理员
  • VB基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧