FiveTech Support Forums

FiveWin / Harbour / xBase community
Board index FiveWin para Harbour/xHarbour Leer pixeles de un bitmap monocromo
Posts: 458
Joined: Tue Mar 14, 2006 07:26 PM
Leer pixeles de un bitmap monocromo
Posted: Thu Jul 23, 2015 09:36 AM

Buenos días,

Teniendo un bitmap monocromo en el disco duro, por ejemplo: "c:\miBitmap.bmp",

¿Cómo podría leerlo pixel a pixel y saber que pixel es negro y cual blanco?

Llevo varios días haciendo pruebas y no he encontrado la manera de hacerlo, estoy seguro que se puede hacer, pero no he sido capaz.
Además, es un tema que me tiene parada la finalización de un programa.

Si alguien pudiera echarme una mano o indicarme un camino para probar, se lo agradecería mucho.

Un Saludo,

Joaquín Martínez
Posts: 498
Joined: Thu May 10, 2007 08:30 PM
Re: Leer pixeles de un bitmap monocromo
Posted: Thu Jul 23, 2015 09:57 AM

Hola a todos.

Esto me interesa. Y también como obtener los pixels de un bitmap de 8 bits.

Saludos

Peaaaaaso de foro...

FWH 2007 - xHarbour - BCC55
Posts: 44158
Joined: Thu Oct 06, 2005 05:47 PM
Re: Leer pixeles de un bitmap monocromo
Posted: Thu Jul 23, 2015 10:15 AM

Joaquín,

Yo cargaría el bitmap en memoria y vas leyendo los pixeles con GetPixel()

regards, saludos

Antonio Linares
www.fivetechsoft.com
Posts: 458
Joined: Tue Mar 14, 2006 07:26 PM
Re: Leer pixeles de un bitmap monocromo
Posted: Thu Jul 23, 2015 10:48 AM

Antonio,

Así lo estaba haciendo y ya me funciona, la pega es que no sé por qué, getPixel() devuelve 0 para el negro y 16777215 para el blanco.

La siguiente cuestión que necesito es cortar el largo del bitmap en memoria y volverlo a grabar a disco.

¿Cómo se haría?

Un Saludo,

Joaquín Martínez
Posts: 6755
Joined: Wed Feb 15, 2012 08:25 PM
Re: Leer pixeles de un bitmap monocromo
Posted: Thu Jul 23, 2015 11:18 AM

Joaquin,

Quizas te pueda ayudar mirar los ejemplos de samples: bmptoc.prg y bmptohex.prg

Cristobal Navarro

Hay dos tipos de personas: las que te hacen perder el tiempo y las que te hacen perder la noción del tiempo

El secreto de la felicidad no está en hacer lo que te gusta, sino en que te guste lo que haces
Posts: 498
Joined: Thu May 10, 2007 08:30 PM
Re: Leer pixeles de un bitmap monocromo
Posted: Thu Jul 23, 2015 11:23 AM

Es una buena solución Antonio. Muy buena. No lo había pensado.
Aunque a mi también me interesa conocer el proceso de correspondencia entre paleta y bits de la imagen. Donde empieza el primer bit/byte de la imagen y ver si es un índice de paleta. O algo así.

Peaaaaaso de foro...

FWH 2007 - xHarbour - BCC55
Posts: 44158
Joined: Thu Oct 06, 2005 05:47 PM
Re: Leer pixeles de un bitmap monocromo
Posted: Thu Jul 23, 2015 11:58 AM

Joaquin,

Tienes que crear un nuevo bitmap en memoria con las dimensiones que quieras y copiar del anterior usando BitBlt()

Busca por BitBlt() en el código fuente de FWH

regards, saludos

Antonio Linares
www.fivetechsoft.com
Posts: 458
Joined: Tue Mar 14, 2006 07:26 PM
Re: Leer pixeles de un bitmap monocromo
Posted: Thu Jul 23, 2015 12:42 PM

Antonio,

Sí, eso ya lo he hecho, lo que no sé es como grabo como bitmap en disco el hDCMemResultante.

Es decir, ya he cargado en un hDC el bitmap original, lo he analizado y visto cual sería la nueva altura del bitmap, con Bitblt lo he copiado a otro hDCMemResultante con la nueva medida (es decir, lo he cortado).

¿ Cómo consigo el handle del nuevo bitmap a partir del hDCMemResultante, para luego guardarlo a disco con DibWrite() ?

Un Saludo,

Joaquín Martínez
Posts: 44158
Joined: Thu Oct 06, 2005 05:47 PM
Re: Leer pixeles de un bitmap monocromo
Posted: Thu Jul 23, 2015 12:58 PM

Joaquín,

Tienes que usar CreateDIBitmap()

Busca en los fuentes de FWH por CreateDIBitmap y encontrarás ejemplos :-)

regards, saludos

Antonio Linares
www.fivetechsoft.com
Posts: 1516
Joined: Thu May 27, 2010 02:06 PM
Re: Leer pixeles de un bitmap monocromo
Posted: Thu Jul 23, 2015 01:00 PM
¿Y usando gdiplus ? ...

Seria algo así ... ( de memoria )
Code (fw): Select all Collapse
 obmp:= TGdibmp():new( cFile)
obmp:resize( nwidth, nheight)
obmp:save( nuevobmp)
obmp:end()
Posts: 44158
Joined: Thu Oct 06, 2005 05:47 PM
Re: Leer pixeles de un bitmap monocromo
Posted: Thu Jul 23, 2015 01:10 PM

genial Manuel! :-)

regards, saludos

Antonio Linares
www.fivetechsoft.com
Posts: 1516
Joined: Thu May 27, 2010 02:06 PM
Re: Leer pixeles de un bitmap monocromo
Posted: Thu Jul 23, 2015 02:26 PM
jmartial wrote:Buenos días,

Teniendo un bitmap monocromo en el disco duro, por ejemplo: "c:\miBitmap.bmp",

¿Cómo podría leerlo pixel a pixel y saber que pixel es negro y cual blanco?

Llevo varios días haciendo pruebas y no he encontrado la manera de hacerlo, estoy seguro que se puede hacer, pero no he sido capaz.
Además, es un tema que me tiene parada la finalización de un programa.

Si alguien pudiera echarme una mano o indicarme un camino para probar, se lo agradecería mucho.

Perdón no conteste a la primera cuestion...
Tambien puedes con gdiplus ...

Code (fw): Select all Collapse
local x,y 
 local obmp:= TGdibmp():new( cFile)

  local nxWidth := obmp:GetWidth()
  local nxHeight:= obmp:GetHeight()

   for x=1 to nxWidth
      for y = 1 to nxHeight
         nColor := nRGB( obmp:GetRedPix( X-1, Y-1 ),  obmp:GetGreenPix( X-1, Y-1 )  , obmp:GetBluePix( X-1, nY-1 ) )
         msginfo( "el pixel"+str(x) +","+str(y) + "es " +  id ( ncolor == 0 , "negro"  , "blanco "   )        
     next
   next

   obmp:end()
Posts: 458
Joined: Tue Mar 14, 2006 07:26 PM
Re: Leer pixeles de un bitmap monocromo
Posted: Fri Jul 24, 2015 07:51 AM

Buenos días,

Sigo atascado con el problema,

¿ Cómo consigo el handle del nuevo bitmap a partir del hDCMemResultante, para luego guardarlo a disco con DibWrite() ?

Buscando ejemplos de createDiBitmap en fwh, veo que usa freeimage, pero me devuelve un handle del bitmap a cero si lo intento así.

¿Alguien sabe como leer un BMP del disco y Grabarlo con otro nombre y otra altura de pixeles?

¿Alguien sabe, como convertir un hDC en un handle a bitmap?

Me da igual usar freeimage, pero necesito cortar el bmp como sea.

Un Saludo,

Joaquín Martínez
Posts: 44158
Joined: Thu Oct 06, 2005 05:47 PM
Re: Leer pixeles de un bitmap monocromo
Posted: Fri Jul 24, 2015 08:06 AM

Joaquín,

Puedes copiar aqui el código que has probado usando createDiBitmap() ?

regards, saludos

Antonio Linares
www.fivetechsoft.com
Posts: 1516
Joined: Thu May 27, 2010 02:06 PM
Re: Leer pixeles de un bitmap monocromo
Posted: Fri Jul 24, 2015 08:26 AM
jmartial wrote:Buenos días,

¿Alguien sabe como leer un BMP del disco y Grabarlo con otro nombre y otra altura de pixeles?

¿Alguien sabe, como convertir un hDC en un handle a bitmap?


¿ cuando dices "otra altura" te refieres a redimensionado o recorte ?
¿ algun motivo para no usar gdiplus ? fwh ya lo integra internamente .
Si explicas un poco que es lo que pretendes te preparo un test sencillo ..