Leer pixeles de un bitmap monocromo

Leer pixeles de un bitmap monocromo

Postby jmartial » Thu Jul 23, 2015 9: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
jmartial
 
Posts: 458
Joined: Tue Mar 14, 2006 7:26 pm

Re: Leer pixeles de un bitmap monocromo

Postby antolin » Thu Jul 23, 2015 9: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
antolin
 
Posts: 498
Joined: Thu May 10, 2007 8:30 pm
Location: Sevilla

Re: Leer pixeles de un bitmap monocromo

Postby Antonio Linares » 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
User avatar
Antonio Linares
Site Admin
 
Posts: 42118
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain

Re: Leer pixeles de un bitmap monocromo

Postby jmartial » 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
jmartial
 
Posts: 458
Joined: Tue Mar 14, 2006 7:26 pm

Re: Leer pixeles de un bitmap monocromo

Postby cnavarro » 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
User avatar
cnavarro
 
Posts: 6549
Joined: Wed Feb 15, 2012 8:25 pm
Location: España

Re: Leer pixeles de un bitmap monocromo

Postby antolin » 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
antolin
 
Posts: 498
Joined: Thu May 10, 2007 8:30 pm
Location: Sevilla

Re: Leer pixeles de un bitmap monocromo

Postby Antonio Linares » 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
User avatar
Antonio Linares
Site Admin
 
Posts: 42118
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain

Re: Leer pixeles de un bitmap monocromo

Postby jmartial » 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
jmartial
 
Posts: 458
Joined: Tue Mar 14, 2006 7:26 pm

Re: Leer pixeles de un bitmap monocromo

Postby Antonio Linares » 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
User avatar
Antonio Linares
Site Admin
 
Posts: 42118
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain

Re: Leer pixeles de un bitmap monocromo

Postby mastintin » Thu Jul 23, 2015 1:00 pm

¿Y usando gdiplus ? ...

Seria algo así ... ( de memoria )
Code: Select all  Expand view  RUN


 obmp:= TGdibmp():new( cFile)
obmp:resize( nwidth, nheight)
obmp:save( nuevobmp)
obmp:end()

 
User avatar
mastintin
 
Posts: 1516
Joined: Thu May 27, 2010 2:06 pm

Re: Leer pixeles de un bitmap monocromo

Postby Antonio Linares » Thu Jul 23, 2015 1:10 pm

genial Manuel! :-)
regards, saludos

Antonio Linares
www.fivetechsoft.com
User avatar
Antonio Linares
Site Admin
 
Posts: 42118
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain

Re: Leer pixeles de un bitmap monocromo

Postby mastintin » Thu Jul 23, 2015 2: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: Select all  Expand view  RUN


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()

 
User avatar
mastintin
 
Posts: 1516
Joined: Thu May 27, 2010 2:06 pm

Re: Leer pixeles de un bitmap monocromo

Postby jmartial » Fri Jul 24, 2015 7: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
jmartial
 
Posts: 458
Joined: Tue Mar 14, 2006 7:26 pm

Re: Leer pixeles de un bitmap monocromo

Postby Antonio Linares » Fri Jul 24, 2015 8:06 am

Joaquín,

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

Antonio Linares
www.fivetechsoft.com
User avatar
Antonio Linares
Site Admin
 
Posts: 42118
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain

Re: Leer pixeles de un bitmap monocromo

Postby mastintin » Fri Jul 24, 2015 8: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 ..
User avatar
mastintin
 
Posts: 1516
Joined: Thu May 27, 2010 2:06 pm

Next

Return to FiveWin para Harbour/xHarbour

Who is online

Users browsing this forum: Google [Bot] and 38 guests