Leer pixeles de un bitmap monocromo

jmartial
Posts: 457
Joined: Tue Mar 14, 2006 7:26 pm

Leer pixeles de un bitmap monocromo

Post by jmartial »

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

Re: Leer pixeles de un bitmap monocromo

Post by antolin »

Hola a todos.

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

Saludos
Peaaaaaso de foro...
User avatar
Antonio Linares
Site Admin
Posts: 37481
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain
Contact:

Re: Leer pixeles de un bitmap monocromo

Post by Antonio Linares »

Joaquín,

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

Antonio Linares
www.fivetechsoft.com
jmartial
Posts: 457
Joined: Tue Mar 14, 2006 7:26 pm

Re: Leer pixeles de un bitmap monocromo

Post by jmartial »

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

Re: Leer pixeles de un bitmap monocromo

Post by cnavarro »

Joaquin,

Quizas te pueda ayudar mirar los ejemplos de samples: bmptoc.prg y bmptohex.prg
C. Navarro
Hay dos tipos de personas: las que te hacen perder el tiempo y las que te hacen perder la noción del tiempo
Si alguien te dice que algo no se puede hacer, recuerda que esta hablando de sus limitaciones, no de las tuyas.
antolin
Posts: 475
Joined: Thu May 10, 2007 8:30 pm
Location: Sevilla

Re: Leer pixeles de un bitmap monocromo

Post by antolin »

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

Re: Leer pixeles de un bitmap monocromo

Post by Antonio Linares »

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

Re: Leer pixeles de un bitmap monocromo

Post by jmartial »

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

Re: Leer pixeles de un bitmap monocromo

Post by Antonio Linares »

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
mastintin
Posts: 1502
Joined: Thu May 27, 2010 2:06 pm

Re: Leer pixeles de un bitmap monocromo

Post by mastintin »

¿Y usando gdiplus ? ...

Seria algo así ... ( de memoria )

Code: Select all


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

 
User avatar
Antonio Linares
Site Admin
Posts: 37481
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain
Contact:

Re: Leer pixeles de un bitmap monocromo

Post by Antonio Linares »

genial Manuel! :-)
regards, saludos

Antonio Linares
www.fivetechsoft.com
User avatar
mastintin
Posts: 1502
Joined: Thu May 27, 2010 2:06 pm

Re: Leer pixeles de un bitmap monocromo

Post by mastintin »

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


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

 
jmartial
Posts: 457
Joined: Tue Mar 14, 2006 7:26 pm

Re: Leer pixeles de un bitmap monocromo

Post by jmartial »

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

Re: Leer pixeles de un bitmap monocromo

Post by Antonio Linares »

Joaquín,

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

Antonio Linares
www.fivetechsoft.com
User avatar
mastintin
Posts: 1502
Joined: Thu May 27, 2010 2:06 pm

Re: Leer pixeles de un bitmap monocromo

Post by mastintin »

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 ..
Post Reply