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