Programación VB para obtener información completa sobre el color de los píxeles de las imágenes
'Utilice DIB para obtener la imagen, modifíquela según el código de otras personas, el color se guarda en ImgData()
Función de declaración privada GetDIBits Lib "gdi32" (ByVal aHDC As Long, ByVal hBitmap As Long, ByVal nStartScan As Long, ByVal nNumScans As Long, lpBits As Any, lpBI As BITMAPINFO, ByVal wUsage As Long) As Long
Función de declaración privada SetDIBits Lib "gdi32" (ByVal hdc Mientras, ByVal hBitmap Mientras, ByVal nStartScan Mientras, ByVal nNumScans Mientras, lpBits Como cualquiera, lpBI como BITMAPINFO, ByVal wUsage Mientras) Mientras
Tipo privado BITMAPINFOHEADER '40 bytes
biSize tan largo
biWidth tan largo
biHeight tan largo
biPlanes como un número entero
biBitCount como un número entero
biCompression durante tanto tiempo
biSizeImage durante tanto tiempo
biXPelsPerMeter durante tanto tiempo
biYPelsPerMeter durante tanto tiempo
biClrUsed durante tanto tiempo
biClrImportante siempre
Tipo final
Tipo privado RGBQUAD
rgbAzul como byte
rgbVerde como byte
rgbRed como byte
rgbReservado como byte
Tipo de fin
Tipo privado BITMAPINFO
bmiHeader como BITMAPINFOHEADER
bmiColors como RGBQUAD
Tipo final
Private Const DIB_RGB_COLORS = 0 ' tabla de colores en RGBs
Private Sub Command1_Click()
Imagen1 .Line (0, 0)-(Imagen1.Ancho, Imagen1.Alto), vbRed
Dim B
ITMAP como BITMAPINFO
Dim ImgData() como Byte'Image Color
Dim lIndex As Long
Dim i As Long, j As Long, n As Long, t Mientras, m
Con BITMAP
.bmiHeader.biSize = 40 'Versión BMP3.0
Termina con
Si GetDIBits (Picture1.hdc, Picture1.Picture.Handle, 0, 0, 0, BITMAP, DIB_RGB_COLORS) lt; gt; 0 Luego 'Obtener el tamaño de los datos del mapa de bits de la imagen
ReDim ImgData(BITMAP.bmiHeader.biSizeImage - 1) 'Redefina la matriz para prepararse para recibir datos de mapa de bits
Si GetDIBits(Picture1.hdc, Picture1.Picture.Handle, 0, BITMAP.bmiHeader.biHeight, ImgData(0), BITMAP, DIB_RGB_COLORS) lt ;gt; 0 Luego 'Obtenga formalmente los datos del mapa de bits y almacene los datos en la matriz definida
'Tenga en cuenta que el orden de almacenamiento de los componentes de color en la matriz es: B, G, R (no R, G, B) Si necesita procesar la imagen, simplemente cambie los datos en la matriz.
'El mapa de bits que probé es de 62x62 píxeles, 24 imágenes en color, 3 bytes de almacenamiento, 188 bytes por fila ( La longitud de una línea de escaneo debe ser múltiplo de 4), por lo que después del escaneo, ***11656 bytes
'****************** El siguiente programa Es para oscurecer el brillo de la imagen (solo para demostración, puedes hacer otros efectos tú mismo) *************************
' Nota: La posición de la primera línea de escaneo comienza desde la esquina inferior izquierda
'La altura del mapa de bits BITMAP.bmiHeader.biHeight en píxeles
'BITMAP.bmiHeader .biWidth bitmap El ancho, la unidad es píxeles
'BITMAP.bmiHeader.biBitCuenta el número de bits de color en la imagen
'El color de cada píxel es: (de abajo a arriba)
t = ((BITMAP.bmiHeader.biWidth * 3 3) \ 4) * 4 'Número de bytes por línea
Para i = 1 A BITMAP.bmiHeader.biHeight
DoEvents
m = t * (i - 1)
Para j = 1 a BITMAP.bmiHeader.biWidth
n
= m (j - 1) * 3
Debug.Print "(" amp; i amp; "," amp; j amp; ")" n amp ": R=" amp; ImgData(n) amplificador " G=" amplificador; ImgData(n 1) amplificador " B=" ImgData(n 2)
Siguiente
Siguiente
Para lIndex = 0 A BITMAP.bmiHeader.biSizeImage - 1
DoEvents
Si ImgData(lIndex) - 100 lt entonces
ImgData( lIndex) = 0
Else
ImgData(lIndex) = ImgData(lIndex) - 100
Finalizar si
Siguiente
'********************************************* * ***********************
SetDIBits Imagen2.hdc, Imagen2.Imagen.Handle, 0, BITMAP.bmiHeader.biHeight - 1. ImgData(0), BITMAP, DIB_RGB_COLORS 'Escribe datos de mapa de bits en PICTURE2
End If
End If
End Sub