C/Visual C - COMO OBTENER EL MAPA DE BITS EN UNA ESTRUCTURA?

 
Vista:

COMO OBTENER EL MAPA DE BITS EN UNA ESTRUCTURA?

Publicado por ifer (52 intervenciones) el 06/02/2003 15:42:18
el problema es este:
Tengo un BMP ya cargado en un CBitmap, solo que necesito saber
de que color es cierto pixel, la unica forma que se me ha ocurrido
es cargandolo en un DC con BitBlt y luego usar GetPixel(X,Y),
pero es completamente ineficiente llevar todo el bmp a un DC solo para
conocer el color de un pixel.
Como puedo llevar todo el mapa de bits del BMP a una estructua de datos?
OJO: el BMP no esta como recurso, lo cargo desde archivo.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:COMO OBTENER EL MAPA DE BITS EN UNA ESTRUCTURA?

Publicado por Endos (58 intervenciones) el 06/02/2003 21:41:46
No carges todo el bitmap en memoria. Lee solo la cabecera para ver la tabla de colores y localizar el punto de inicio de la imagen y luego desplazate hasta el punto concreto para obtener su color. La estructura que tiene un BMP la puedes conseguir en http://www.wotsit.org.

Saludos.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

EL PROBLEMA NO ES ESE

Publicado por ifer (52 intervenciones) el 07/02/2003 16:35:30
Mi problema no es saber la tabla de colores, necesito (y urgente) saber el color RGB de cualquier pixel dentro del bitmap, por ello es necesario cargar todo el bitmap porque necesito sacrificar memoria en pos de velocidad, lo que tu dices esta bien pero tendria que aplicarlo cada vez que necesite el dato, lo mejor seria tenerlo en memoria como si fuera un array bidimensional (matriz).
por fa alguien sabe como hacerlo o donde puedo conseguir alguna clave?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:EL PROBLEMA NO ES ESE

Publicado por Endos (58 intervenciones) el 07/02/2003 22:33:46
Si la imagen es de 16 o 256 colores y no sabes cual es la tabla de colores es imposible que obtengas los valores RGB de los pixels. Si es 24 bits no hay problema porque, evidentemente, no usa tabla de colores.
Cargar toda la imagen en memoria es mas lento que solo leer los pixels que te interesan porque para lo primero tienes que leer el archivo completo desde el disco.
Si sabes la anchura y altura de la imagen puedes localizar cualquier pixel facilmente con dos multiplicaciones y una suma (Pos=(Y*AnchoImagen*BytesPorPixel)+X).
Ten en cuenta que los bmp guardan basura en los margenes si su anchura no es divisible entre 8, asi que si la imagen tiene 77 pixels de ancho, realmente son 80 los que tiene. Los colores se guardan en formato invertido: ABGR (La A es el canal Alpha) y la imagen esta invertida en su coordenada Y (el punto (0,0) es la esquina inferior izquierda).
Mira la estructura de la cabecera de los bmp y demas datos que puedes encontrar en la web que te pase anteriormente.

Saludos.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Whats??

Publicado por ifer (52 intervenciones) el 08/02/2003 16:41:06
Tu explicacion es bastante buena, pero tendria que aclarar algo: el bmp sera monocromo, y la tengo en un CBitmap, con ello puedo acceder al los datos del bitmap??? si lo apunto con un puntero???
es decir no es necesario abrirlo como un archivo cualquiera???

Postdata: el link que pusiste anteriormente esta roto, por si acaso.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar