Điều chỉnh độ sáng hình ảnh trong Excel imageControl

Điều chỉnh độ sáng hình ảnh trong Excel imageControl

Chào các đối tác,

Điều chỉnh độ sáng hình ảnh trên trang tính trong Excel imageControl

Tôi cần lấy giá trị độ sáng của hình ảnh trong PictureBox, nhưng tôi không hiểu cách tạo hằng số độ sáng.

Tôi không muốn thay đổi độ sáng, tôi muốn kiểm tra độ sáng, lấy giá trị độ sáng và sử dụng nó để so sánh trong đoạn mã bên dưới.

 Nếu Color.GetBrightness() < 0.5 thì

Một bức tranh đơn giản trong bảng tính có độ sáng nhưng không có tay cầm.
Trong ImageControl, ảnh có một handle nhưng không thể lấy độ sáng một cách đơn giản, tôi không biết cách làm điều đó.

công việc này

 =========================  Đặt myDocument = Worksheets(1)   myDocument.Shapes(1).PictureFormat.Brightness = 0.3  =========================

Điều này không hiệu quả

Image1.picture.Brightness

Ở đây là các hằng số, tôi cần tạo độ sáng.

 Private Const WHITENESS As Int32 = &HFF0062   Private Const BLACKNESS As Int32 = &H42

Cảm ơn bạn rất nhiều.




Trả lời:

Độ sáng nằm trong khoảng từ 0 đến 1. Xem liên kết sau.

https://msdn.microsoft.com/en-us/library/office/ff840787.aspx?f=255&MSPPError=-2147217396

Các hằng số là số thực (double numbers); không phải số nguyên vì chúng là số thập phân.

Private Const WHITENESS As Double = 0.5
Private Const BLACKNESS As Double = 1

Để trả về giá trị thuộc tính Độ sáng

Dim myDocument As Worksheet
Dim dblBright As Double

Đặt myDocument = Worksheets(1)

dblBright = myDocument.Shapes(1).PictureFormat.Brightness 'Gán độ sáng cho biến



Trả lời:

Chào OssieMac , cảm ơn bạn!

Mã của bạn rất tuyệt, nhưng tôi cần mã để hiển thị hình ảnh trong ImageControl trên bảng tính:

Hình ảnh 1. Hình ảnh

Tôi không chắc mã của bạn có hoạt động hay không.

Tôi sẽ thử nghiệm.



Trả lời:
Tôi không chắc bạn muốn nói gì. Có phải bạn muốn tăng hoặc giảm độ sáng của hình ảnh trên bảng tính? Nếu vậy, điều này có thể được thực hiện bằng một nút xoay trên bảng tính.

Trả lời:

Chào OssieMac ,

Vấn đề của tôi là tôi cần lấy độ sáng của một bức ảnh để đưa vào Picturebox trong bảng tính.

Đặt một Picturebox (ImageControl) vào Worksheet và đặt một hình ảnh vào Picturebox đó.

Không chỉ đơn thuần là chuyển một bức tranh thành bài tập.

Vấn đề là tôi cần thực hiện công việc này với ImageControl chứ không chỉ dùng mỗi hình ảnh.

Chỉ có hình ảnh là mã số:

 myDocument.Shapes(1).PictureFormat.Brightness = 0.3

Nhưng với PictureBox thì tôi không biết:

Hình ảnh 1. Hình ảnh



Trả lời:
Giờ thì tôi nghĩ mình đã hiểu câu hỏi rồi. Theo như tôi biết thì ảnh không có thuộc tính Độ sáng.

Trả lời:

Đúng,

Tôi nghĩ đây là giải pháp:


https://www.experts-exchange.com/questions/10027489/Calculating-'brightness'-of-a-bitmap.html
=================================================

Bình luận của tác giả: clay111296
ID: 14396241997-11-05
Cảm ơn bạn đã cung cấp thông tin chi tiết. Tôi có một câu hỏi:
Với nRed = nRed + Int(nRGB / &H10000 And &HFF)
Ký hiệu ^^^ được định nghĩa ở đâu? Hay đây là phép tính tích lũy mà bạn đang thực hiện (cộng tổng màu đỏ trong tất cả các pixel)? Nghĩa là bạn đang theo dõi tổng số tích lũy ở đây?


Nhân tiện, mã nguồn duy nhất tôi có được là cái bạn đã đăng lên diễn đàn này, trừ khi bạn đã gửi email cho tôi ở chỗ làm (*** Địa chỉ email đã bị xóa vì lý do bảo mật ***). Tôi sẽ kiểm tra ở đó vào ngày mai.


=======================================
Bình luận của chuyên gia: rantanen
ID: 14396251997-11-05
Đất sét,

Ồ, đúng rồi, đó là một đoạn mã từ hàm con bên dưới và như bạn đã nói, đó là phép đếm tích lũy.

Private Function GetBrightness(picX As PictureBox, nSamples As Integer, nX As Integer, nY As Integer) As Single
Khai báo I là số nguyên
Giảm độ sáng nRGB càng lâu càng tốt.
Dim nRed As Integer
Dim nGreen As Integer
Khai báo nBlue dưới dạng số nguyên
Khai báo nGray là số nguyên
Dim nRedSum As Long
Dim nGreenSum As Long
Dim nBlueSum As Long
Dim nSum As Long

Đối với I = 1 đến nSamples
nRGB = GetPixel(picX.hdc, Int(Rnd() * nX), Int(Rnd() * nY))
nRedSum = nRedSum + Int(nRGB / &H10000 And &HFF)
nGreenSum = nGreenSum + Int(nRGB / &H100 And &HFF)
nBlueSum = nBlueSum + Int(nRGB And &HFF)
Tiếp theo tôi
nSum = (0,3 * nRedSum + 0,59 * nGreenSum + 0,11 * nBlueSum) / nSamples
GetBrightness = 100 * nSum / 255
Kết thúc hàm

Tôi đã gửi mẫu của mình đến '*** Địa chỉ email đã bị xóa vì lý do bảo mật ***', địa chỉ mà bạn đã cung cấp trong một ghi chú trước đó.

Địa chỉ email của tôi là '*** Địa chỉ email đã bị xóa vì lý do bảo mật ***'



Trả lời:

Tôi nghĩ đây là giải pháp:

Nếu bạn làm cho nó hoạt động được thì tôi sẽ rất quan tâm đến giải pháp cuối cùng. Có vẻ như thiếu sót điều gì đó vì tôi nhận được lỗi biên dịch "Kiểu do người dùng định nghĩa chưa được định nghĩa" ở dòng Hàm.

Tôi đã chèn API từ bài đăng trước đó vào URL mà bạn cung cấp nhưng vẫn không được.



Trả lời:

Chào OssieMac ,

Tôi chưa thử cách này, nhưng bạn có thể tải lên tệp mẫu của bạn được không?

Comments

Popular posts from this blog

Điều tôi muốn làm trong Excel 2010 là tạo một nút tùy chỉnh và gắn nó vào thanh công cụ Truy nhập nhanh và chạy một macro cụ thể.

Excel 2016 - mở tất cả các tệp trong MỘT phiên bản

Mở tài liệu Excel và Word từ Outlook Lỗi - Không đủ bộ nhớ