Programación General > Delphi

 Crecimiento Del Ejecutable Con Archivos Res

(1/2) > >>

Deiv:
Mi duda es la siguiente, ¿Cuan bueno o No beneficioso es engordar una aplicación (ejecutable) de Delphi?, Todos sabemos, que por evitar ser pirateados algunos íconos, Imágenes, o Sonidos lo trabajamos con arcvhivos RES verdad?.

¿Cuan beneficioso sería introducir en un RES 200 íconos 32x32?
¿Cuan beneficioso sería introducir en un RES 200 imágenes BMP 64x64?
Y como adimento digamos unas 5 imágenes BMP grandes (800x600) para fondos y otros.

TOTAL = 405,

Tal vez no me quedaría otra que tenerlos en un directorio y evitar engordar el Ejecutable, pero con la probabilidad que más adelante lo descarguen éstas imágenes e íconos que me costó construirlos.

Si hablé de una cantidad de 200, es por la sencilla razón de crear una Tabla Periódica Química y para otros trabajos jalándolos y mostrar después de un posterior cálculo en mi aplicación.
Me sugerieron guardar en dll, pero acaso no existen programas que recuperan íconos de una dll? (pues estaríamos en lamisma situación) y si no fuera así como realizo este proceso?
¿Afecta en algo engordar el ejecutable, se vuelve lento, no pasa nada?
¿Cual sería el mejor planteamiento?

Gracias espero vuestras sugerencias

Enko:
Pensalo así, NO IMPORTA DONDE ESTEN LAS IMAGENES SIEMPRE OCUPAN ESPACIO.
O sea, si estan dentro o fuera de la ejecutable, siempre será la misma cantidad de espacio en el disco duro que va a ocupar la ejecutable para funcionar normalmente.

Sugerencias:
  200 iconos de 32x32 te ocupan mucho más espacio que una imagen de 640x640 (es decir 32x200) por la paleta.
Te conviene tener una imagen grande con todas las imagenes pequeñas e ir recortando los sectores que necesitas. Algo as'i>
 

Lo que tienes que hacer es hacer una imagen con todos los iconos de la tabla periodica, uno despue sde otro (6400x32) (va a ocupar menos porque por el tema de la paleta que individualmente ocupa más)

--- Código: Text --- var  MainBitmap: TBimap;begin  MainBitmap := TBitmap.Create;  MainBitmap.LoadFRomFile('nombreImagenGrande.bmp');  despues, creas un vector de 120 elementos de tipo bitmap (el indice del vector sería el numero atómico , 1 hidrogeno, 2 helio... )

--- Código: Text --- var   bmpElementos: Array[1..120] of TBitmap;   I: Integer;begin   for i:=1 to 120 do  begin     bmpElementos[i] := TBitmap.Create;      height := 32;     width := 32;  end;  no te olvides despues de hacer bmpElementos.Free;

ahora que los tienes inicializados, cargas los trozitos de las imagenes a cada indice del vector;

--- Código: Text --- SourceRect: TREct;  for i:=1 to 120 do  begin      //es i*32 - 32 porque asi empieza copiando desde 0 y no 32      // si el priemer indice fuera 0, no haria falta, pero ser'ia incomodo hidrogeno=1              SourRect := Rect(i*32-32, 0, i*32, 32);     bmpElementos.Canvas.CopyRect(Rect(0,0,32,32),mainBitmap.canvas, SourcRect);      //la recta de destino es constante 0,0,32,32   end;end;  Con eto tienes todas las imagenes cargadas en un vector, donde el indice corresponde a la imagen del elemento del numero at'omico correspondiente.

Inclusive podrias hacer algo as'i:

--- Código: Text ---    TElemento = record      Numero: Byte;      Peso: Real;      NroOxidacion: ShortInt; //-127..127      Electronegatividad: ShortInt;              Imagen: TBitmap; // y cargas todo aca;   end;    TTablaPeriodica = array[1..120] of TElemento;end;  
Cualquier otroa duda, avisa
Saludos

Deiv:
Enko, primero que nada muchas gracias, por responder, siempre lo has hecho a todas mis preguntas. Muy notable tu dominio en química. Tu explicación muy buena la aplicaré mas adelante, cuando termine de construir todos los íconos y de repente ahí tenga muchas preguntas.

Me parece que no planteé bien mi pregunta y no me he dejado entender.

No debí preguntar si ocupa espacio o no, debí preguntar ¿como se vuelve mi aplicación cuando engordo el ejecutable con RES que contienen varios iconos? ¿lenta, normal? ¿es beneficioso o no? ¿Cual la diferencia si guardo en un Directorio todos los iconos bajo el riesgo de ser copiado (ni modo) corre mejor mi aplicación?

- Hable también de DLLs que si tuviera en grupos de dlls los íconos o imágenes, ¿Correría más rápida mi aplicación o sería igual?

¿Cual es el camino más óptimo, o es igual guardar en un RES engordado el ejecutable que guardarlo todo en un directorio a todos los íconos e imágenes, o en dlls? . Perjudico si engordo al ejecutable?

Enko:
Respecto a eso, no te sabría decir muy bien, pero según tengo entendido, si cargas las imagenes dentro de la ejecutable tarda un poco más en cargarse (ni te das cuenta en realidad) y ademas, si luego la quieres comprimir (con compresor de ejecutables que ademas cifra, no win zip) es probable que las imagenes no sean leibles.

Cuando cargas una imagen en tiempo de ejecucion, esta se carga "al monton de la memoria", es decir, en una memoria compartida. Si está en la ejecutable, se crga "en la memoria de la pila", es decir, de la ejecutable donde estan las variables que hayas definido, por eso, se puede volver mas lento por ahí la cosa si haces de ese modo.

Igualmente, habría falta una opinion de alguien más para asegurarse.

Personalmente prefiero tenerlas afuera. para engañar al usuario, Puedes cambiarles la extencion por alguna otra *.DAT por ejemplo.

una ventaja de tener las imagenes afuera es que puedes crear SKINS, es decir, tener la misma imagen en distintos colores.

PD: si no quieres dibujar, intenta escanear una tabla periodica sencilla.

Deiv:

--- Citar ---Personalmente prefiero tenerlas afuera. para engañar al usuario, Puedes cambiarles la extencion por alguna otra *.DAT por ejemplo.
--- Fin de la cita ---
Cambie la extensión de BMP x DAT, y sin ningún problema pueden recuperar ALGUNOS programas manejadores de Imágenes (Paint por ejemplo) pero desde ya es una buena idea para engañar al usuario.

¿Y como lo llamo a un DAT desde Delphi? Solo probé con una TIMage y en la propiedad "Picture" no tiene la opción para cargar un DAT.

¿Como trabajo los DATs en Delphi con una TImage, TPaintBox y TImageList?

Saludos!

Navegación

[0] Índice de Mensajes

[#] Página Siguiente

Ir a la versión completa