Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Gráficos
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 21-02-2009
Avatar de MAXIUM
MAXIUM MAXIUM is offline
Miembro
 
Registrado: may 2005
Posts: 1.488
Poder: 20
MAXIUM Va camino a la fama
Angry TImage, me da problemas al cargar grandes imagenes.

Ya estoy con el cerebro en las manos, no logro que un TImage haga algo tan sencillo como esto:

Código Delphi [-]
     Image1.Width := 3970;
     Image1.Height:= 4600;
     Image1.Canvas.FloodFill(1, 1, clWhite, fsSurface);

No se como solucionarlo, me da un problema de Espacio de almacenamiento insuficiente...
Responder Con Cita
  #2  
Antiguo 21-02-2009
Avatar de cHackAll
[cHackAll] cHackAll is offline
Baneado?
 
Registrado: oct 2006
Posts: 2.159
Poder: 20
cHackAll Va por buen camino
3970x4600x[pf32bit]=70Mb.... Talvez si compras más memoria

Si no es mucha intromisión, qué piensas hacer con eso?
__________________
RTFM > STFW > Foro > Truco > Post > cHackAll > KeBugCheckEx
Responder Con Cita
  #3  
Antiguo 21-02-2009
Avatar de MAXIUM
MAXIUM MAXIUM is offline
Miembro
 
Registrado: may 2005
Posts: 1.488
Poder: 20
MAXIUM Va camino a la fama
Estoy usando 3970x4600x[pf8bit]

El asunto es que con un TPaintBox no me da esos problemas, pero tengo que estar redibujandolo para que no se borre la imagen cargada en el. Por otra parte, cosas como MS Paint, ese que biene en todos los Windows no da dramas.

Solo quiero cargar una imagen grande (un mapa).
Responder Con Cita
  #4  
Antiguo 22-02-2009
Avatar de MAXIUM
MAXIUM MAXIUM is offline
Miembro
 
Registrado: may 2005
Posts: 1.488
Poder: 20
MAXIUM Va camino a la fama
Otro dato es que he descubierto que el problema ocurre al usar el Canvas, ya que que LoadFromFile funciona bien. AYUDA!!!!
Responder Con Cita
  #5  
Antiguo 22-02-2009
Avatar de cHackAll
[cHackAll] cHackAll is offline
Baneado?
 
Registrado: oct 2006
Posts: 2.159
Poder: 20
cHackAll Va por buen camino
Cita:
Empezado por MAXIUM Ver Mensaje
Estoy usando 3970x4600x[pf8bit]...
Cita:
Empezado por MAXIUM Ver Mensaje
...el problema ocurre al usar el Canvas...
Canvas.PixelFormat := pf8bit;

[Error] Unit1.pas(): Undeclared identifier: 'PixelFormat'
[Fatal Error] Project1.dpr(): Could not compile used unit 'Unit1.pas'


__________________
RTFM > STFW > Foro > Truco > Post > cHackAll > KeBugCheckEx
Responder Con Cita
  #6  
Antiguo 22-02-2009
Avatar de MAXIUM
MAXIUM MAXIUM is offline
Miembro
 
Registrado: may 2005
Posts: 1.488
Poder: 20
MAXIUM Va camino a la fama
Gracias cHackAll, lo probare. De todos modos ¿conoces algun componente similar que tenga TCanvas.Handle de tipo HDC?
Responder Con Cita
  #7  
Antiguo 25-02-2009
Avatar de cHackAll
[cHackAll] cHackAll is offline
Baneado?
 
Registrado: oct 2006
Posts: 2.159
Poder: 20
cHackAll Va por buen camino
Cita:
Empezado por MAXIUM Ver Mensaje
Gracias cHackAll, lo probare...
No amigo, solo queria mostrarte mi "teoria" ... al manipular el cavas de una imagen aunque esta sea monocroma va a usar 32 bits por pixel.
Cita:
Empezado por MAXIUM Ver Mensaje
...¿conoces algun componente similar que tenga TCanvas.Handle de tipo HDC?
Pues hay muchos, aunque el "HDC" es un valor entero, el manejador retornado por wl SO al crear un Canvas, cualquier componente llegará a lo mismo.
__________________
RTFM > STFW > Foro > Truco > Post > cHackAll > KeBugCheckEx
Responder Con Cita
  #8  
Antiguo 26-02-2009
Avatar de MAXIUM
MAXIUM MAXIUM is offline
Miembro
 
Registrado: may 2005
Posts: 1.488
Poder: 20
MAXIUM Va camino a la fama
cHackAll, gracias de todos modos, me he dado por vencido...

Usare el LoadFrom aunque ello implica consumir 72MB de recurso.

Pronto dare unos metodos que permiten cargar una gran imagen en memoria consumiendo solo un máximo de 300kb. Es un método que accidentalmente descubrí jeje!!.

Bueno, probe de todo incluso GDI+, pero se me acaba el tiempo y debo terminar el trabajo.
Responder Con Cita
  #9  
Antiguo 11-03-2009
Avatar de BlackDaemon
BlackDaemon BlackDaemon is offline
Miembro
 
Registrado: dic 2006
Ubicación: Bolivia - Santa Cruz
Posts: 206
Poder: 18
BlackDaemon Va por buen camino
Hola

la pregunta...

¿Cual es el método mágico?

Ya que yo quiero trabajar con imágenes grandes.

Saludos!
Responder Con Cita
  #10  
Antiguo 11-03-2009
Avatar de MAXIUM
MAXIUM MAXIUM is offline
Miembro
 
Registrado: may 2005
Posts: 1.488
Poder: 20
MAXIUM Va camino a la fama
El mismo que utilizaste. Ir cargando porciones de la imagen completa y "pegandolas", las otras las vas liberando, de ese modo el consumo de memoria en mi caso no supero los 400kb en una imagen de 5000x5000.

Pero el sistema a veces funcionaba otras no, nunca descubrí el porque, siempre me daba "Espacio insuficiente de almacenamiento para procesar este comando...". Solo me funcionaba en forma segura si no pasaba de los 3000x3000.
Responder Con Cita
  #11  
Antiguo 11-03-2009
Avatar de BlackDaemon
BlackDaemon BlackDaemon is offline
Miembro
 
Registrado: dic 2006
Ubicación: Bolivia - Santa Cruz
Posts: 206
Poder: 18
BlackDaemon Va por buen camino
Hola

Aver, creo que andas equivocado, por que yo lo que hago es lo siguiente:
primero creo el Timage de X cantidad de pixeles, luego ir uniendo trozo por trozo, he creado imágenes grandes, pero necesito saber como crear de unos 60000 por 60000 px, como ves el tuyo de 3000 no se le acerca, esas de 3000 y más las puedo crear sin problemas, y tampoco puedes decir que vas creando y liberando la memória, por que en ese caso, el resutado sería solamente un trozo, osea el último, ya que lo que hacemos es ir añadiendo un trozo al Timage y este mismo lo guarda en memória, luego otro, etc y al final todo _junto_ se guarda en una sola imágen.

Saludos!
Responder Con Cita
  #12  
Antiguo 11-03-2009
Avatar de MAXIUM
MAXIUM MAXIUM is offline
Miembro
 
Registrado: may 2005
Posts: 1.488
Poder: 20
MAXIUM Va camino a la fama
Código Delphi [-]
Const
     Mapa: Array[0..5,0..9] of String =
    (('Quilicura_01.bmp', 'Quilicura_02.bmp', 'Quilicura_03.bmp', 'Quilicura_04.bmp', 'Quilicura_05.bmp',
      'Quilicura_06.bmp', 'Quilicura_07.bmp', 'Quilicura_08.bmp', 'Quilicura_09.bmp', 'Quilicura_10.bmp'),
     ('Quilicura_11.bmp', 'Quilicura_12.bmp', 'Quilicura_13.bmp', 'Quilicura_14.bmp', 'Quilicura_15.bmp',
      'Quilicura_16.bmp', 'Quilicura_17.bmp', 'Quilicura_18.bmp', 'Quilicura_19.bmp', 'Quilicura_20.bmp'),
     ('Quilicura_21.bmp', 'Quilicura_22.bmp', 'Quilicura_23.bmp', 'Quilicura_24.bmp', 'Quilicura_25.bmp',
      'Quilicura_26.bmp', 'Quilicura_27.bmp', 'Quilicura_28.bmp', 'Quilicura_29.bmp', 'Quilicura_30.bmp'),
     ('Quilicura_31.bmp', 'Quilicura_32.bmp', 'Quilicura_33.bmp', 'Quilicura_34.bmp', 'Quilicura_35.bmp',
      'Quilicura_36.bmp', 'Quilicura_37.bmp', 'Quilicura_38.bmp', 'Quilicura_39.bmp', 'Quilicura_40.bmp'),
     ('Quilicura_41.bmp', 'Quilicura_42.bmp', 'Quilicura_43.bmp', 'Quilicura_44.bmp', 'Quilicura_45.bmp',
      'Quilicura_46.bmp', 'Quilicura_47.bmp', 'Quilicura_48.bmp', 'Quilicura_49.bmp', 'Quilicura_50.bmp'),
     ('Quilicura_51.bmp', 'Quilicura_52.bmp', 'Quilicura_53.bmp', 'Quilicura_54.bmp', 'Quilicura_55.bmp',
      'Quilicura_56.bmp', 'Quilicura_57.bmp', 'Quilicura_58.bmp', 'Quilicura_59.bmp', 'Quilicura_60.bmp'));
Var
   MapaBMP: TBitmap;
   Horizontal, Vertical: Integer;
begin
     MapaBMP:= TBitmap.Create;

  // Mapea el plano cargando las imágenes.   
     Try
        For Vertical:= 0 To 5 Do
           For Horizontal:= 0 To 9 Do
           Begin
                MapaBMP.LoadFromFile(Directorio + 'plano\'+ Mapa[Vertical, Horizontal]);
                Image1.Canvas.Draw(Horizontal*510, Vertical*500, MapaBMP);
           End;
     Finally
        MapaBMP.Free; // <- Voy liberando memoria 
     End; 
end;

Cada imagen es de 510x500 pixeles, Las dimensiones del TImage las dejo definidas desde un principio y dentro de un ScrollBox. El consumo máximo de memoria no supera los 500kb para una imagen de 5100x5000 en este caso.

Última edición por MAXIUM fecha: 11-03-2009 a las 17:32:10.
Responder Con Cita
  #13  
Antiguo 11-03-2009
Avatar de BlackDaemon
BlackDaemon BlackDaemon is offline
Miembro
 
Registrado: dic 2006
Ubicación: Bolivia - Santa Cruz
Posts: 206
Poder: 18
BlackDaemon Va por buen camino
Hola

Mira, yo tengo una imágen creada de 3800 px X 3800px y sin usar lo que tu dices, tarda un poco en unirla, pero con un progress bar y un thread se soluciona, además yo no tengo imágenes definidas, eso lo hace el usuario, osea que no podría hacer lo del array, aunque podría emplear los arrays dinámicos, pero de igual forma tendría problemas con los nombres de las imágenes, etc, y para que hacer esto si como lo hago me funciona a la perfección, pero repetiré otra ves, necesito imágenes GRANDES, de 60000px de ancho y lado, y como te digo, mis 3800 y tus 3000 no me sirven de mucho
De todas formas muchas gracias por los datos, pero ahí en tu código en el Image1 es donde quisiera crearlo de ~60000px
Saludos
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
Cargar Imagenes grandes en un Timage Rapidamente angelmsf Gráficos 2 27-08-2008 03:35:04
Duda Arranque Web con Imágenes grandes Deiv HTML, Javascript y otros 4 26-12-2007 17:03:48
Imagenes mas grandes en un TreeView hmrvivas OOP 1 13-07-2007 06:02:43
Visualizar imagenes grandes fjcg02 Gráficos 2 20-11-2006 16:33:36
cargar diferentes imagenes en un TImage huevozen C++ Builder 3 27-07-2006 09:37:17


La franja horaria es GMT +2. Ahora son las 21:48:03.


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