Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Otros entornos y lenguajes > C++ Builder
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 03-10-2008
oab_boa oab_boa is offline
Registrado
 
Registrado: jul 2008
Posts: 5
Poder: 0
oab_boa Va por buen camino
carga de una imagen en memoria

Buenas Gente, un saludo a todos.

Tengo este problema, una aplicacion simple con 2 elementos TImage (Image1 e Image2) y un boton, en Image1 tengo una foto.
Lo que quiero es que al hacer click en el boton, me visualice la imagen cargada en Image2, es decir que la copie.

Lo que quiero es realizar esto pero copiando la imagen en un bloque de memoria sin usar bitblt, se entiende? quiero ver como es el tratamiento de una imagen en memoria usando punteros y memoria dinamica.

No tengo ni encuentro ningun ejemplo para esto. Les agradezco de ante mano por su ayuda.

Haaa, me olvidava, uso builder c++

Saludos
Responder Con Cita
  #2  
Antiguo 03-10-2008
[coso] coso is offline
Miembro Premium
 
Registrado: may 2008
Ubicación: Girona
Posts: 1.678
Poder: 0
coso Va por buen camino
Hola, mirando en las clases TBitmap, TCanvas, TImage etc. no aparece el acceso directo a lo que serian los datos en si. Por otra parte, en teoria seria algo como

Código:
 
tam = x*y*prof*sizeof(tipo_de_datos_image);
 
malloc(Image2->puntero_a_datos,tam);
memcpy(Image2->puntero_a_datos,Image1->puntero_a_datos,tam);
donde prof seria la profundidad de color (cuantos bytes necesita para representar cada color), x la anchura e y la altura. tipo_de_datos_image en teoria seria unsigned char. Vamos, que seria copiar una serie de datos de memoria a otro. Está todo muy al aire a ver si investigando un poco encuentro mas informacion. Saludos.

Última edición por coso fecha: 03-10-2008 a las 18:41:23.
Responder Con Cita
  #3  
Antiguo 03-10-2008
[coso] coso is offline
Miembro Premium
 
Registrado: may 2008
Ubicación: Girona
Posts: 1.678
Poder: 0
coso Va por buen camino
por otra banda, existe .scanline que quizas te simplifique bastante lo que quieras hacer. Saludos de nuevo.
Responder Con Cita
  #4  
Antiguo 03-10-2008
oab_boa oab_boa is offline
Registrado
 
Registrado: jul 2008
Posts: 5
Poder: 0
oab_boa Va por buen camino
saludos

Cita:
Empezado por coso Ver Mensaje
por otra banda, existe .scanline que quizas te simplifique bastante lo que quieras hacer. Saludos de nuevo.
Gracias COSO, estuve investigando y encontre un codigo que hace un tratamiento de imagenes bmp, el programa corre en modo consola y se lanza con argumentos, hace un tratamiento a una imagen pasada como parametro y genera un segundo archivo con esta imagen ya tratada, lo tomare como base y cuando lo tenga bien masticado, posteo la solucion,

el link: http://mipagina.cantv.net/bernardolg/CPP/BmpFx.html

Saludos..
Responder Con Cita
  #5  
Antiguo 04-10-2008
Avatar de escafandra
[escafandra] escafandra is offline
Miembro Premium
 
Registrado: nov 2007
Posts: 2.197
Poder: 20
escafandra Tiene un aura espectacularescafandra Tiene un aura espectacular
Windows trata las imágenes como objetos DIB que son la imagen en memoria de los bmp (de distinta profundidad de color). Las API que usan ongetos DIB trabajan con estas imégenes de memoria.

Hace unos años cree un código para lo que creo que necesitas.

Para convertir un objeto TBitmap a este tipo de objeto analiza este código:

Código:
BITMAPFILEHEADER *FileHeader;
BITMAPINFO       *Info;
void             *Bits;
TMemoryStream    *SMBitmap;
  
SMBitmap = new TMemoryStream;
Bitmap->SaveToStream(SMBitmap);
SMBitmap->Position = 0;
  
FileHeader = (LPBITMAPFILEHEADER)SMBitmap->Memory;
Info = (LPBITMAPINFO)((Byte*)SMBitmap->Memory + sizeof(BITMAPFILEHEADER));
int  nColors = Info->bmiHeader.biClrUsed;
int  colorAlloc = nColors * sizeof(RGBQUAD); // size of color tables

// Info es la imagen del DIB  (BITMAPINFO)
// Esta es la imagen en memoria de los pixels:
Bits = (char*)Info + ((int)Info->bmiHeader.biSize + colorAlloc);

Si lo que buscas es el simple traslado de la Imagen, quizás te baste con las funciones TBitmap.SaveToStream y TBitmap.LoadFromStream.


Espero que sea esto lo que buscas.
Saludos.

Última edición por escafandra fecha: 04-10-2008 a las 19:39:03.
Responder Con Cita
  #6  
Antiguo 06-10-2008
oab_boa oab_boa is offline
Registrado
 
Registrado: jul 2008
Posts: 5
Poder: 0
oab_boa Va por buen camino
gracias

Cita:
Empezado por escafandra Ver Mensaje
Windows trata las imágenes como objetos DIB que son la imagen en memoria de los bmp (de distinta profundidad de color). Las API que usan ongetos DIB trabajan con estas imégenes de memoria.

Hace unos años cree un código para lo que creo que necesitas.

Para convertir un objeto TBitmap a este tipo de objeto analiza este código:

Código:
BITMAPFILEHEADER *FileHeader;
BITMAPINFO       *Info;
void             *Bits;
TMemoryStream    *SMBitmap;
  
SMBitmap = new TMemoryStream;
Bitmap->SaveToStream(SMBitmap);
SMBitmap->Position = 0;
  
FileHeader = (LPBITMAPFILEHEADER)SMBitmap->Memory;
Info = (LPBITMAPINFO)((Byte*)SMBitmap->Memory + sizeof(BITMAPFILEHEADER));
int  nColors = Info->bmiHeader.biClrUsed;
int  colorAlloc = nColors * sizeof(RGBQUAD); // size of color tables

// Info es la imagen del DIB  (BITMAPINFO)
// Esta es la imagen en memoria de los pixels:
Bits = (char*)Info + ((int)Info->bmiHeader.biSize + colorAlloc);
Si lo que buscas es el simple traslado de la Imagen, quizás te baste con las funciones TBitmap.SaveToStream y TBitmap.LoadFromStream.


Espero que sea esto lo que buscas.
Saludos.

Hola escafandra, estuve viendo tu codigo, anda a la perfeccion, muchas gracias!!!!
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
problema al carga imagen desde servidor CarlosHernandez Gráficos 4 09-05-2008 23:43:55
Al incluir un Uses ¿se carga todo a memoria? cestradar Varios 16 28-04-2008 19:26:09
Aplicacion carga muchas fichas en memoria. zugazua2001 Varios 4 06-09-2005 17:40:41
Carga de Delphi senpiterno Varios 1 21-09-2004 17:45:12
Carga rápida de jpg xflo Gráficos 0 28-07-2004 10:38:38


La franja horaria es GMT +2. Ahora son las 02:24:01.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi