Red de conocimiento informático - Material del sitio web - Cómo convertir imágenes en color a blanco y negro usando programación vb

Cómo convertir imágenes en color a blanco y negro usando programación vb

Lo usé ayer, el efecto es muy bueno y la velocidad es rápida

(El código está en el séptimo piso de la dirección a continuación)

Un ejemplo de uso de API para completar, n veces más rápido que GetPixel

Opción explícita

'Un ejemplo de procesamiento de imágenes

'Desarrollado por Jadeluo, 2004/02 /21

'EMail: Jadeluo@sina.com

BITMAP de tipo privado

bmType As Long

bmWidth As Long

bmHeight Mientras

bmWidthBytes Mientras

bmPlanes Como Entero

bmBitsPixel Como Entero

bmBits Mientras

Tipo final

Función de declaración privada GetObject Lib "gdi32" Alias ​​​​"GetObjectA" (ByVal hObject As Long, ByVal nCount As Long, lpObject As Any) As Long

Función de declaración privada GetBitmapBits Lib "gdi32 " (ByVal hBitmap mientras, ByVal dwCount mientras, lpBits como cualquiera) Mientras

Función de declaración privada SetBitmapBits Lib "gdi32" (ByVal hBitmap mientras, ByVal dwCount como Largo, lpBits como cualquiera) Mientras

Private Sub Form_Load()

picShow.BorderStyle = vbBSNone

picShow.Move 0, 0

End Sub

Private Sub cmdLoad_Click()

En caso de error, reanudar a continuación

Con CommonDialog1

.Filter = "Picture(* .BMP;*.JPG;* .GIF;*.ICO)|*.BMP;*.JPG;*.GIF;*.ICO|Todos los archivos(*.*)|*.*"

.CancelError = True

.ShowOpen

Si Err.Number = 0 Entonces

picShow.AutoSize = True

picShow.Picture = LoadPicture(.FileName)

Finalizar si

Finalizar con

En caso de error Ir a 0

Finalizar sub

Private Sub cmdGray_Click()

Atenuar PicBits() como byte, PicInfo como BITMAP, BytesPerPixel siempre

Atenuar R como byte, G como byte, B como byte, Gray como byte, i As Long

With picShow

.AutoRedraw = True

GetObject .Image, Len(PicInfo), PicInfo

BytesPerPixel = PicInfo .bmBitsPixel \ 8

ReDim PicBits(1 A PicInfo.bmWidth * PicInfo.bmHeight * BytesPerPixel)

GetBitmapBits .Image, UBound(PicBits), PicBits(1)

Para i = 0 A UBound(PicBits) \ BytesPerPixel - 1

B = PicBits(i * BytesPerPixel + 1)

G = PicBits(i * BytesPerPixel + 2)

R = PicBits(i * BytesPerPixel + 3)

Gris = R * 0,39 + G * 0,5 + B * 0,11

'La siguiente oración convierte el valor de gris en un valor binario

' Si Gray > 127 Entonces Gray = 255 De lo contrario Gray = 0

PicBits(i * BytesPerPixel + 1) = Gris

PicBits(i * BytesPerPixel + 2) = Gris

PicBits(i * BytesPerPixel + 3) = Gris

Siguiente i

SetBitmapBits .Image, UBound(PicBits), PicBits(1)

.Refresh

Terminar con

End Sub