Quisiera analizar el contenido de un bitmap mostrándolo en pantalla con @ r,c BITMAP .... y leyéndolo punto a punto con GetPixel(). Esto funciona muy bien cuando la imagen es visible en la ventana pero no si la oculto oBmp:Hide() o desplazo la imagen fuera de la pantalla.
¿Alguien sabe alguna forma de leer, pixel a pixel, el contenido de un BMP sin necesidad de hacerlo visible en pantalla?
Gracias y saludos,
Rafael
Cómo analizar el contenido de un bitmap
- Rafael Clemente
- Posts: 365
- Joined: Sat Oct 08, 2005 7:59 pm
- Location: Barcelona, Spain
- Paco Garcia
- Posts: 172
- Joined: Fri Oct 07, 2005 12:00 pm
- Contact:
Hola Rafael
Un saludo
Code: Select all
function analiza( hDC, hBmp )
local hDCMem := CreateCompatibleDC( hDC )
local hOldBmp := SelectObject( hDCMem, hBmp )
local x := 1
local y := 1
local nColor
nColor := GetPixel( hDCMem, x, y ) //a tutipleni
SelectObject( hDCMem, hOldBmp )
DeleteDC( hDCMem )
return nil
#pragma BEGINDUMP
#include <windows.h>
#include "hbapi.h"
HB_FUNC( CREATECOMPATIBLEDC )
{
hb_retnl( (LONG) CreateCompatibleDC( ( HDC ) hb_parnl( 1 )));
}
#pragma ENDDUMP
- Rafael Clemente
- Posts: 365
- Joined: Sat Oct 08, 2005 7:59 pm
- Location: Barcelona, Spain
Paco:
Muchas gracias por tu idea. La he probado así:
y para todos los pixels me devuelve blanco (cLin = "-1-1-1-1-1-1-1-1...")
¿Se te ocurre qué estoy haciendo mal?
Rafael
Muchas gracias por tu idea. La he probado así:
Code: Select all
METHOD Analiza(oImage)
LOCAL hBmp := oImage:hWnd
LOCAL hDc := GetDc(hBmp)
local hDCMem := CreateCompatibleDC( hDC )
local hOldBmp:= SelectObject( hDCMem, hBmp )
local nX9 := oImage:nWidth
local nY9 := oImage:nHeight
local x, y, p
FOR y := 0 TO nY9
cLin := ""
FOR x := 0 TO nX9
p := GetPixel(hDcMem, x, y)
cLin += ALLTRIM(STR(p))
NEXT
? cLin
NEXT
SelectObject( hDCMem, hOldBmp )
DeleteDC( hDCMem )
RETURN NIL
#pragma BEGINDUMP
....
#pragma ENDDUMP
¿Se te ocurre qué estoy haciendo mal?
Rafael
- Paco Garcia
- Posts: 172
- Joined: Fri Oct 07, 2005 12:00 pm
- Contact:
- Rafael Clemente
- Posts: 365
- Joined: Sat Oct 08, 2005 7:59 pm
- Location: Barcelona, Spain
Paco:
Perdona, pero no entiendo la modificación. He puesto
pero, claro, me da el error TBITMAP:Message not found()
¿Es que tengo que capturar hBmp con alguna otra función?
Saludos y gracais otra vez
Rafael
Perdona, pero no entiendo la modificación. He puesto
Code: Select all
local hOldBmp:= SelectObject( hDCMem, oImage:hBmp)
¿Es que tengo que capturar hBmp con alguna otra función?
Saludos y gracais otra vez
Rafael
- Paco Garcia
- Posts: 172
- Joined: Fri Oct 07, 2005 12:00 pm
- Contact:
METHOD Analiza(oImage)
LOCAL hBmp := oImage:hWnd
LOCAL hDc := GetDc(hBmp)
local hDCMem := CreateCompatibleDC( hDC )
local hOldBmp:= SelectObject( hDCMem, hBmp )
local nX9 := oImage:nWidth
local nY9 := oImage:nHeight
local x, y, p
Un hWnd no es un manejador de una imagen. Es un manejador de una ventana. El handle que necesitamos es el hBmp no el hWnd
en lugar de LOCAL hBmp := oImage:hWnd
debes poner LOCAL hBmp := oImage:hBmp
LOCAL hBmp := oImage:hWnd
LOCAL hDc := GetDc(hBmp)
local hDCMem := CreateCompatibleDC( hDC )
local hOldBmp:= SelectObject( hDCMem, hBmp )
local nX9 := oImage:nWidth
local nY9 := oImage:nHeight
local x, y, p
Un hWnd no es un manejador de una imagen. Es un manejador de una ventana. El handle que necesitamos es el hBmp no el hWnd
en lugar de LOCAL hBmp := oImage:hWnd
debes poner LOCAL hBmp := oImage:hBmp
- Rafael Clemente
- Posts: 365
- Joined: Sat Oct 08, 2005 7:59 pm
- Location: Barcelona, Spain