Newsgroup: it.comp.lang.delphi
Titolo: immagini e occupazione di memoria

vorrei scrivere un piccolo programma in delphi per visualizzare delle
immagini (bmp o jpg).
il fatto è che le mie immagini sono abbastanza pesanti (anche 100 mb)
e quindi non riesco a caricarle in memoria. Qualcuno ha qualche
suggerimento?
inoltre ho notato una cosa molto strana che non mi so spiegare.
Ho un immagine di 3 MB (quindi per nulla grande), quando la carico in
memoria con il mio programma l'occupazione di memoria del mio
programma schizza a 150 MB perchè succede questo?
qualcuno ha qualche suggerimento?

 ha scritto nel messaggio 
news:1175936975.9...@b75g2000hsg.googlegroups.com...

Per esperienza ho potuto constatare che il motore grafico di Delphi e' poco 
ottimizzato e anche lento.
Ti suggerisco di usare la libreria graphics32 che trovi in Internet.
Giorgio

 qualcuno ha qualche suggerimento?
Faccio un'ipotesi : il formato dell'immagine e' compresso, caricandola 
in memoria il programma la espande
-- 
===============================================================
Alberto Rubinelli - A2 SISTEMI 
news.bbip.it
 ThunderBird 1.5.0.9
Via Costantino Perazzi 22 - 28100 NOVARA - ITALY
Tel 0321 640149   Fax 0321 391769   BBS 0321 392320
Mail: 
alb...@oldcomputers.de
skype: albertorubinelli  ICQ : 49872318
Visita il mio museo di computers: 
http://www.oldcomputers.it
===============================================================

 programma schizza a 150 MB perchč succede questo?
Mah!
Non sapendo cosa fa il tuo programma, come lo fa, che versione di Delphi
usi, su quale sistema operativo lavori, come hai "misurato" questo aumento,
quali altri programmi avevi aperti nel momento della "misurazione" ... direi
che č piuttosto arduo fare anche solo una ipotesi.
Ciao
-- 
ACSH
[TurboDelphi]
Chi fa da se', fatica il doppio

grazie a tutti per le risposte.
dunque il problema della moltiplicazione della memoria l'ho risolto.
Usavo le Tgraphics32 e per quello aumentava a dismisura la quantità di
memoria usata in quanto il formato della mia immagine era BMP a 1 bit
di profondità, e le Tgraphics32 memorizzano tutto a 32 bit, ecco
spiegato l'aumento di memoria.
la soluzione che ho adottato è stata quella di utilizzare il Tbitmap
"liscio" del delphi, solo che così ho il problema dello zoom.
Adesso faccio lo zoom creandomi ogni volta una nuova Tbitmap con
Tbitmap.create delle dimensioni che mi servono ma così è troppo lento
ed è ingestibile lo zoom....
devo trovare un'altra soluzione

programma schizza a 150 MB perchè succede questo?
Perché evidentemente il sistema prealloca memoria.

 ha scritto nel messaggio 
news:1175972959....@q75g2000hsh.googlegroups.com...

Perche' creare ogni volta una nuova Bitmap: la crei una sola volta e quando 
ti serve la usi, per distruggerla quando sei sicuro che non ti servira' 
piu'.
Giorgio

 ha scritto nel messaggionews:1175972959....@q75g2000hsh.googlegroups.com...

perchè se non creo una nuova bitmap, come faccio a fare lo zoom?
per adesso se dov fare lo zoom 2X. creo una nuova bitmap con le
dimensioni raddoppiate e dealloco la bmp precedente.
così facendo la cosa funziona ma è lentissima

 così facendo la cosa funziona ma è lentissima
Non ho letto il resto della discussione (perdono, ho un "free time 
slice" molto limitato), quindi non so se un suggerimento specifico ti è 
già stato dato.
In passato avevo avuto a che fare con la realizzazione di un software 
che prevedeva l'elaborazione grafica (con vari effetti) applicata ad 
immagini di sfondo e ad immagini generate direttamente da Delphi; ho 
risolto utilizzando la libreria *Graphics32* 
(
http://www.graphics32.org/wiki/
) che mi ritrovo a suggerire spesso.
Oltre a controlli visuali molto performanti a livello di grafica 2D, la 
libreria contiene una classe, *TBitmap32*, che gestisce in modo efficace 
i bitmap e le possibili operazioni di disegno e ridimensionamento che vi 
possono essere applicate.
Recentemente peraltro, ho creato un controllo personalizzato (per conto 
terzi) in cui si gestiva lo zoom con centratura di immagini bitmap (e 
non) caricate all'interno del controllo, e la libreria G32 è stato un 
partner perfetto per svolgere queste operazioni, senza flickering e con 
tempi di esecuzione più che soddisfacenti.
Prova eventualmente a scaricarla (l'ultima release, la 1.8.3, risale a 
marzo) e a dare un'occhiata agli esempi e alla documentazione allegata.
Ciao,
   Marco.
-- 
MARCO BREVEGLIERI
  (
http://www.marco.breveglieri.name
)

 Giorgio
Prova con la proprieta'  Stretch o Autosize del componente TImage.
Usa 2 TImage se vuoi conservare l'immagine originale.
Giorgio 

 Usa 2 TImage se vuoi conservare l'immagine originale.
Non è un po' dispendioso usare due controlli visuali, preposti alla 
visualizzazione, per eseguire elaborazioni su un'immagine?
Un semplice "resize" lo si può ottenere anche sfruttando i metodi 
dell'oggetto *TCanvas*, ad esempio con una /StretchDraw/, senza bisogno 
di ricorrere a controlli visuali, benché grafici (quindi non 
eccessivamente esosi di risorse).
