Leer pixeles de un bitmap monocromo
Leer pixeles de un bitmap monocromo
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.
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
Joaquín Martínez
Re: Leer pixeles de un bitmap monocromo
Hola a todos.
Esto me interesa. Y también como obtener los pixels de un bitmap de 8 bits.
Saludos
Esto me interesa. Y también como obtener los pixels de un bitmap de 8 bits.
Saludos
Peaaaaaso de foro...
- Antonio Linares
- Site Admin
- Posts: 37481
- Joined: Thu Oct 06, 2005 5:47 pm
- Location: Spain
- Contact:
Re: Leer pixeles de un bitmap monocromo
Joaquín,
Yo cargaría el bitmap en memoria y vas leyendo los pixeles con GetPixel()
Yo cargaría el bitmap en memoria y vas leyendo los pixeles con GetPixel()
Re: Leer pixeles de un bitmap monocromo
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?
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
Joaquín Martínez
Re: Leer pixeles de un bitmap monocromo
Joaquin,
Quizas te pueda ayudar mirar los ejemplos de samples: bmptoc.prg y bmptohex.prg
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.
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.
Re: Leer pixeles de un bitmap monocromo
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í.
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...
- Antonio Linares
- Site Admin
- Posts: 37481
- Joined: Thu Oct 06, 2005 5:47 pm
- Location: Spain
- Contact:
Re: Leer pixeles de un bitmap monocromo
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
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
Re: Leer pixeles de un bitmap monocromo
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() ?
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
Joaquín Martínez
- Antonio Linares
- Site Admin
- Posts: 37481
- Joined: Thu Oct 06, 2005 5:47 pm
- Location: Spain
- Contact:
Re: Leer pixeles de un bitmap monocromo
Joaquín,
Tienes que usar CreateDIBitmap()
Busca en los fuentes de FWH por CreateDIBitmap y encontrarás ejemplos
Tienes que usar CreateDIBitmap()
Busca en los fuentes de FWH por CreateDIBitmap y encontrarás ejemplos
Re: Leer pixeles de un bitmap monocromo
¿Y usando gdiplus ? ...
Seria algo así ... ( de memoria )
Seria algo así ... ( de memoria )
Code: Select all
obmp:= TGdibmp():new( cFile)
obmp:resize( nwidth, nheight)
obmp:save( nuevobmp)
obmp:end()
- Antonio Linares
- Site Admin
- Posts: 37481
- Joined: Thu Oct 06, 2005 5:47 pm
- Location: Spain
- Contact:
Re: Leer pixeles de un bitmap monocromo
genial Manuel!
Re: Leer pixeles de un bitmap monocromo
Perdón no conteste a la primera cuestion...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.
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()
Re: Leer pixeles de un bitmap monocromo
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.
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
Joaquín Martínez
- Antonio Linares
- Site Admin
- Posts: 37481
- Joined: Thu Oct 06, 2005 5:47 pm
- Location: Spain
- Contact:
Re: Leer pixeles de un bitmap monocromo
Joaquín,
Puedes copiar aqui el código que has probado usando createDiBitmap() ?
Puedes copiar aqui el código que has probado usando createDiBitmap() ?
Re: Leer pixeles de un bitmap monocromo
¿ cuando dices "otra altura" te refieres a redimensionado o recorte ?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?
¿ 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 ..