Programación de Gráficos - Ayuda. Urge. Copiar imagen.

 
Vista:

Ayuda. Urge. Copiar imagen.

Publicado por Pedro Molina (1 intervención) el 13/01/2001 00:00:00
Tengo una imagen en un array de bytes. Necesito pasarla a un picturebox. Lo he intentado con StretchDIBits y con BitBlt, pero no he sido capaz. No sé si estará mal la declaración de la función o qué.

DECLARACIÓN:

Declare Function BitBlt Lib "gdi32" (ByVal hDestDC As Long, ByVal x As Long, ByVal y As Long, ByVal nWidth As Long, ByVal nHeight As Long, ByVal hSrcDC As Long, ByVal xSrc As Long, ByVal ySrc As Long, ByVal dwRop As Long) As Long

Declare Function StretchDIBits Lib "gdi32" (ByVal hDC As Long, ByVal DestX As Long, ByVal DestY As Long, ByVal wDestWidth As Long, ByVal wDestHeight As Long, ByVal SrcX As Long, ByVal SrcY As Long, ByVal wSrcWidth As Long, ByVal wSrcHeight As Long, ByVal lpBits As Long, BitsInfo As BITMAPINFO, ByVal wUsage As Long, ByVal dwRop As Long) As Long

USO:
With frmWebComm.Picture1
.ScaleMode = vbPixels
result = StretchDIBits(.hDC, 0, 0, 160, 120, 0, 0, 160, 120, VideoData(0), bm, dib_rgb_colors, srccopy)

´result = BitBlt(.hDC, 0, 0, 160, 120, VideoData(0), 0, 0, srccopy)

END wITH


Os agradezco la ayuda. Un saludo.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Alejandro

Pasar una imagen en un array de bytes a un PictureBox

Publicado por Alejandro (110 intervenciones) el 03/04/2024 20:47:13
Pedro, para pasar una imagen en un array de bytes a un PictureBox en Visual Basic, puedes utilizar la función StretchDIBits o BitBlt. Sin embargo, en el código que has proporcionado, parece que hay algunos problemas en la declaración de las funciones y en el uso de los parámetros. Aquí te muestro una posible solución:

DECLARACIÓN:

1
2
3
4
5
Declare Function BitBlt Lib "gdi32" (ByVal hDestDC As Long, ByVal x As Long, ByVal y As Long, ByVal nWidth As Long, ByVal nHeight As Long, ByVal hSrcDC As Long, ByVal xSrc As Long, ByVal ySrc As Long, ByVal dwRop As Long) As Long
 
Declare Function StretchDIBits Lib "gdi32" (ByVal hDC As Long, ByVal DestX As Long, ByVal DestY As Long, ByVal wDestWidth As Long, ByVal wDestHeight As Long, ByVal SrcX As Long, ByVal SrcY As Long, ByVal wSrcWidth As Long, ByVal wSrcHeight As Long, ByVal lpBits As Long, lpBitsInfo As BITMAPINFO, ByVal wUsage As Long, ByVal dwRop As Long) As Long
 
USO: With frmWebComm.Picture1 .ScaleMode = vbPixels result = StretchDIBits(.hDC, 0, 0, 160, 120, 0, 0, 160, 120, VarPtr(VideoData(0)), bm, DIB_RGB_COLORS, SRCCOPY) 'result = BitBlt(.hDC, 0, 0, 160, 120, VarPtr(VideoData(0)), 0, 0, SRCCOPY) End With

En el código de uso, he realizado los siguientes cambios:

- He utilizado la función VarPtr para obtener la dirección de memoria del array de bytes VideoData(0). Esto es necesario para pasar el puntero correcto a las funciones StretchDIBits y BitBlt.
- He corregido el nombre del parámetro BitsInfo a lpBitsInfo en la función StretchDIBits.
- He utilizado los valores constantes DIB_RGB_COLORS y SRCCOPY en lugar de las variables no definidas dib_rgb_colors y srccopy.

Espero que esta solución te ayude a pasar la imagen en el array de bytes a un PictureBox correctamente.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar