【问题标题】:Read pixel colors of an image读取图像的像素颜色
【发布时间】:2013-05-07 20:33:55
【问题描述】:

在VBA中,如何读取图像中每个像素的颜色值?

我在 VB 6.0 中找到了this solution,但它并不直接适用于 VBA。

【问题讨论】:

  • 如果代码使用 API,那么可以将其实现到 VBA 中,设置对 API 函数的一些引用...
  • 您要询问的文件类型是什么?有什么特别的吗?也许是文件类型列表?不同的文件格式会以不同的方式存储颜色信息,因此读取不同类型的文件需要知道我们需要读取的内容。
  • 下面的答案效果很好,但如果你真的想扫描每个像素(而不是点击它),那么这个stackoverflow.com/questions/45998565/… 可以很好地完成这项工作,并且全部在 VBA 中(没有图形库等)跨度>

标签: image excel vba colors pixel


【解决方案1】:

在这里尝试发布在此站点上的解决方案: http://sim0n.wordpress.com/2009/03/27/vba-q-how-to-get-pixel-colour/

我不得不将 ByRef 更改为 ByVal,但除此之外它运行良好。使用“插入”>“图片”插入图片并将宏分配给单击事件。我刚刚将单元格 A1 的颜色设置为您单击的颜色,但我相信您明白了。

#If VBA7 Then
    Private Declare PtrSafe Function GetPixel Lib "gdi32" (ByVal hdc As LongPtr, ByVal x As Long, ByVal y As Long) As Long
    Private Declare PtrSafe Function GetCursorPos Lib "user32" (ByRef lpPoint As POINT) As LongPtr
    Private Declare PtrSafe Function GetWindowDC Lib "user32" (ByVal hwnd As LongPtr) As LongPtr
#Else
    Private Declare Function GetPixel Lib "gdi32" (ByVal hdc As Long, ByVal x As Long,     ByVal y As Long) As Long
    Private Declare Function GetCursorPos Lib "user32" (ByRef lpPoint As POINT) As Long
    Private Declare Function GetWindowDC Lib "user32" (ByVal hwnd As Long) As Long
#End If
Private Type POINT
    x As Long
    y As Long
End Type

Sub Picture1_Click()
    Dim pLocation As POINT
    Dim lColour As Long

    Dim lDC As Variant
    lDC = GetWindowDC(0)
    Call GetCursorPos(pLocation)
    lColour = GetPixel(lDC, pLocation.x, pLocation.y)
    Range("a1").Interior.Color = lColour
End Sub

要使用它,请将图片放入工作表中,右键单击图片并将此宏分配给它。

【讨论】:

  • 此处相同,但有附加信息:您还可以使用简单粘贴在工作表中的图像(“插入 > 图片”过程不是强制性的)。再次感谢 +1 并感谢 @KM Hs
猜你喜欢
  • 2010-10-10
  • 2017-07-16
  • 2012-04-15
  • 2011-05-22
  • 1970-01-01
  • 2013-05-11
  • 2013-07-21
  • 2019-07-27
相关资源
最近更新 更多