2013-05-13 84 views
5

Trong VBA, làm thế nào tôi có thể đọc giá trị màu của từng pixel trong một hình ảnh?Đọc các màu pixel của hình ảnh

Tôi đã tìm thấy this solution trong VB 6.0 nhưng không áp dụng trực tiếp trong VBA.

+1

nếu mã sử dụng API thì có thể thực hiện nó thành VBA thiết lập một số tham chiếu đến các chức năng của API ... –

+0

Bạn đang hỏi về loại tệp nào? Có gì đặc biệt không? Có thể danh sách các loại tệp? Các định dạng tệp khác nhau sẽ lưu trữ thông tin màu sắc khác nhau để đọc các loại khác nhau sẽ yêu cầu biết những gì chúng tôi sẽ được yêu cầu đọc. – jhoe

+0

Câu trả lời dưới đây hoạt động tốt nhưng nếu bạn thực sự muốn quét từng pixel (thay vì nhấp vào nó) thì https://stackoverflow.com/questions/45998565/scan-image-pixel-by-pixel-in-vba/ này 46004570 # 46004570 thực hiện công việc độc đáo và tất cả trong VBA (không có thư viện đồ họa, v.v.) – perfo

Trả lời

6

Hãy thử giải pháp được đăng trên trang web này ở đây: http://sim0n.wordpress.com/2009/03/27/vba-q-how-to-get-pixel-colour/

tôi đã phải thay đổi một ByRef cho một ByVal nhưng ngoài việc đó nó hoạt động tốt. Chèn ảnh bằng Chèn> Hình ảnh và gán macro cho sự kiện nhấp chuột vào. Tôi vừa mới làm cho nó thiết lập màu sắc của ô A1 thành màu bạn nhấp vào, nhưng tôi chắc chắn bạn sẽ có được ý tưởng.

#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 

Để sử dụng, đặt ảnh trong trang tính, nhấp chuột phải vào hình ảnh và gán macro này cho trang tính.

+0

Câu trả lời hay, đã thử nghiệm và hoạt động hoàn hảo. +1 – hammythepig

+1

Tương tự tại đây, với thông tin bổ sung: bạn cũng có thể sử dụng hình ảnh mà bạn chỉ cần dán vào trang tính (thủ tục "Chèn> Hình ảnh" không bắt buộc). Cảm ơn một lần nữa +1 và cảm ơn bạn @KM Hs – Arthur

Các vấn đề liên quan