Red de conocimiento informático - Problemas con los teléfonos móviles - Programación VB para obtener información completa sobre el color de los píxeles de las imágenes

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