Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

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

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
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
Crear imágenes grandes con Timage

Hola

bueno, estoy trabajando con mapas y resulta que tengo mapas pequeños y los uno a uno solo, para eso creo un Timage, del tamaño de la suma de todos los lados x altura de los trozos, y ahí creo su tamaño total del Timage, peeero cuando son muchos trozos me da un error al querer definir el tamaño del Timage, en este caso quiero crear un Timage de 4352 px X 4352px y me da error en: Espacio insuficiente de almacenamiento para procesar este comando

¿ALguna idea de como trabajar con imágenes "muy" grandes en delphi? como de 60000 px x 60000px ? usando el método que les expliqué, osea creando el Timage y ahí ir pegando de a poco trozo por trozo.

Utilizo delphi 2009

Saludos!
Responder Con Cita
  #2  
Antiguo 11-03-2009
Avatar de MAXIUM
MAXIUM MAXIUM is offline
Miembro
 
Registrado: may 2005
Posts: 1.485
Poder: 20
MAXIUM Va camino a la fama
Yo he tenido el mismo problema con imágenes 10 veces menores que la tuya

Al final me aburrí, solo use el Image1.Picture.LoadFrom('archivo. bmp');

Cosas que podrían ayudarte:
- Usa imágenes en formato BMP, aunque ocupan más espacio de disco, consumen menos RAM y tardan menos en cargar en comparación a JPG o PNG.
- Reduce la cantidad de colores de tu imagen a 8 bit si eso no afecta a la calidad de la imagen, sino sigue subiendo a 16 o 24. Con 8 bit (indexado) consigues menos tamaño (KB, MB, etc) en imagen por ende también menos consumo de RAM.

Por falta de tiempo y cansancio no probé los siguientes métodos:

- Tratar la imagen como una página web, osea crear un html con las imagens y las ordenas, lo pruebas en tu navegador favorito a ver que tal se ve, luego en Delphi aplicas el componente WebBrowser y cargas el archivo.

- Crear un arreglo de TImages, cada uno según mis pruebas, auqnue tal vez dependa de cada equipo, soporta un máximo... de 3000x3000. En cada uno cargar la porción de imagen y crear el algoritmo que permita sincronizarlos al momento de desplazar la imagen.
Responder Con Cita
  #3  
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

Bueno, yo no dije que necesitaba cargar/mostrar la imágen final, solamente la creo y guardo automáticamente la imágen, pero en este caso no quiere crear el Timage de la dimensión que le digo, de ahí no pasa mi código, entonces sigue la pregunta, como crear y guardar imágenes grandes, NO mostrarlas.

Saludos!
Responder Con Cita
  #4  
Antiguo 11-03-2009
Avatar de casacham
casacham casacham is offline
Miembro
 
Registrado: abr 2006
Ubicación: Cordoba->Argentina. Arboleas->Almeria->España
Posts: 184
Poder: 18
casacham Va por buen camino
Creo que es un verdadero rompecabezas armar ese tipo de proyecto. Lamento no poder aportar solucion, pero me parecio un proyecto muy interesante



__________________
La vida no trata de encontrarse a uno mismo, sino de crearse a uno mismo.
Tanto si piensas que puedes como si no, estarás en lo cierto
Responder Con Cita
  #5  
Antiguo 11-03-2009
Avatar de MAXIUM
MAXIUM MAXIUM is offline
Miembro
 
Registrado: may 2005
Posts: 1.485
Poder: 20
MAXIUM Va camino a la fama
Este... como nombraste el Timage...

Con este mismo código http://www.clubdelphi.com/foros/show...004#post341004 pero en vez de TImage, te creas otro TBitmap y haces

Bitmap.SavetoFile... o algo así
Responder Con Cita
  #6  
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

Trabajo con jpgs y necesito que la salida sea este mismo formato

saludos!
Responder Con Cita
  #7  
Antiguo 13-03-2009
Avatar de cHackAll
[cHackAll] cHackAll is offline
Baneado?
 
Registrado: oct 2006
Posts: 2.159
Poder: 20
cHackAll Va por buen camino
Aparte de haber visto este hilo y tu post te respondo;

Si tenemos 2 Gb. de memoria disponible alcanzaremos los 26000 pixeles RGB cuadrados, pero llegar a los 60000 requiere 10 Gb. de memoria que luego debe ser comprimida para obtener una imagen en formato portable (como el que exiges). Para poder convertirla debe estar en algún momento en memoria porque casi no existen conversores de formatos de imagen que trabajen sobre archivos.

Considerando que pocas PCs tienen dicha capacidad podríamos crear la imagen directamente en un archivo (.BMP) de 10 Gb. (para los 60000px cuadrados) y luego ver la forma de comprimirlo, sin embargo, el formato BMP en su cabezal tiene un campo de 32 bits que contiene el tamaño del archivo, lo que significa que el tamaño máximo de un Bitmap es de 4 Gb., lo que nos limita a un Scan Line menos que 64 Kilo pixeles cuadrados utilizando 256 colores, pero si queremos utilizar el RGB al que estamos acostumbrados solo podremos tener una imagen de 37837 pixeles cuadrados (dicha dimensión también será el limite en un SO de 32 bits)

Código Delphi [-]
program BigBMP; uses Windows;

const
 Width = 37837;
 Height = 37837;

var
 Header: record
  FileHeader: TBitmapFileHeader;
  InfoHeader: TBitmapInfoHeader;
 end = (FileHeader: (bfType: $4D42 {BM}; bfSize: $FFFF367B {Width * Height * 3} + SizeOf(Header); bfOffBits: SizeOf(Header));
        InfoHeader: (biSize: SizeOf(TBitmapInfoHeader); biWidth: Width; biHeight: Height; biPlanes: 1; biBitCount: 8 * 3 {RGB}; biSizeImage: $FFFF367B));
 hFile, Size, Index: Integer;
 lpScanLine: PChar;

begin
 hFile := _lcreat('image.bmp', 0);
 _lwrite(hFile, @Header, SizeOf(Header));
 Size := Width * (Header.InfoHeader.biBitCount div 8);
 lpScanLine := Ptr(LocalAlloc(LMEM_ZEROINIT, Size));
 for Index := 1 to Height do
  _lwrite(hFile, lpScanLine, Size);
 LocalFree(Cardinal(lpScanLine));
 _lclose(hFile);
end.

Trabajando de la anterior forma, es posible ir dibujando en el BMP por cuadrantes, pero de cualquier forma no podrás abrir ni convertir el archivo… para qué hacerlo si en una resolución de monitor estándar 1600px es una dimensión grande 60000px es una utopía.

Saludos
__________________
RTFM > STFW > Foro > Truco > Post > cHackAll > KeBugCheckEx
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

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
TImage, me da problemas al cargar grandes imagenes. MAXIUM Gráficos 12 11-03-2009 18:42:50
Cargar Imagenes grandes en un Timage Rapidamente angelmsf Gráficos 2 27-08-2008 04:35:04
Duda Arranque Web con Imágenes grandes Deiv HTML, Javascript y otros 4 26-12-2007 18:03:48
Imagenes mas grandes en un TreeView hmrvivas OOP 1 13-07-2007 07:02:43
Visualizar imagenes grandes fjcg02 Gráficos 2 20-11-2006 17:33:36


La franja horaria es GMT +2. Ahora son las 14:36:04.


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