Newsgroup: it.comp.lang.delphi
Titolo: Problemi di stampa Aiutatemi!!!!

Ho il seguente problema (l'ennesimo!):
Devo stampare un' immagine .JPG di 10x10cm acquisita con lo scanner.
Carico l'immagine in un TImage e poi la stampo con l'oggetto TPrinter
(BeginDoc, etc, etc) ma l'immagine stampata è piccolissima e se la
ingrandisco sgrana in modo impressionante.
NB: se la stessa immagine la stampo con un qualsiasi programma di grafica
viene stampata in dimensioni reali senza sgranare.
Come faccio a stampare la mia bella immagine in dimensioni reali senza
sgranare?
e' possibile in Delphi?
dove sbaglio?
Grazie a tutti per l'aiuto!
Ciao Ciao
Gianluca D'Angelo
[AKA GregBUG!]

 ingrandisco sgrana in modo impressionante.
Il fatto che sia piccolissima è normale.
La prima volta che ho stampato una immagine mi sono venute le convulsioni a
cercare l'errore...
Peccato che l'errore non sia Delphi ma, diciamo, logico.
Ogni stampante ha diverse risoluzioni di stampa. E ogni modello di stampante
ha un'area stampabile diversa.
Leggendo la dimengione della Pagewidth di Tprinter leggi quanti pixel è
largo il canvas su cui disegnare.
Allora, la mia LJ1100 mi segnala come pagewidth 4672 pixel.
Una imamgine a pieno schermo (ipotizzando uno schermo a 800x600) è di
800x600 pixel.
Se uno incolla l'immagine sul canvas (diciamo... metodo Draw) senza fare
modifiche risulta rimpicciolita di 4672/800 = 5,84 volte. Logico che
l'immagine risulti piccola!
Una soluzione è quella di usare StretchDraw della Tcanvas di Tprinter e
passargli l'area come Trect sulla quale l'immagine deve essere disegnata.
Inutile dire che il Trect deve avere le proporzioni x/y identiche
all'immagine iniziale, altrimenti viene distorta...
Che l'immagine venga sgranata mi mette un poco in crisi.
La mia esperienza riguarda il tentativo di fare un programma che stampi il
thumbnail (o come cavolo si scrive...) delle imamgini di una directory.
Per questo programma sono in crisi mistica. Non tanto per il codice Delphi
che è un sciocchezza, ma per una discorso di risorse...
Se metto su un foglio A4 5x8 immagini piccole stampate a 600dpi, il fiel di
stampa è talmente grosso che accade due cose:
La stampante rifiuta la stampa
Oppure le immagini risultano rovinate e SGRANATE.
Ho stampato su diverse stampati laser che ho in ufficio e ognuna ha stampato
a modo suo (la stampa migliore l'ho avuta su una che può fare anche stampare
sull' A3 a 1200dpi e quindi ha molta memoria disponibile...stampa perfetta).
Non vorrei che fosse un problema di memoria e risorse...
Mah, attendo anche io un giudizio di qualche personaggio di questo NG con
notevoli cognizioni (e ce ne sono molti su questo NG...)
Ciao
Matteo

 Non vorrei che fosse un problema di memoria e risorse...
Circa un annetto fa provai a fare un programmino per la stampa di copertine
di cd (circolari).
Dopo aver trovato "l'errore" di cui parlavi, e cioè il fatto che con una
stampante bisogna ragionare in "twips" (analogo dei pixel... molto in prima
approssimazione), mi è accaduta la stessa cosa : problema con le risorse di
sistema.
Quello che non riuscivo proprio a capire era come mai la mia applicazione,
che stampava immagini neanche troppo grandi (dimensioni di un cd), occupasse
tanta memoria e altre applicazioni "professionali", potessero stampare tutto
quello che volessero...
Premetto subito che abbandonai il progetto e quindi quello che scriverò qui
sotto potrà essere fantascienza... ^_^ :
Nell'help sdk di windows il problema dei twips è spiegato bene (cioè quella
di dover scalare l'immagine), ma nulla è detto sulla memoria disponibile, e
per di più utilizzano (negli esempi) la stretchdraw.
Secondo me (sarebbe da testare), si dovrebbe "sgranare" l'immagine, cioè se
l'immagine è 800x600 e la si vuole stampare su un'area di 16x12 centimetri,
e la stampante ha 3000x5000 twips, prima si trovano i fattori di conversione
:
3000 : 29,7cm (formato A4) = x (twips necessari) : 16cm,
quindi x saranno i twips necessari sui 3000 della stampante per riempire una
dimensione di 16 centimetri.
nell'esempio x = 3000*16/29.7 ~ 1616 twips. I pixel verticali andranno
quindi "stretchati" di un fattore 1616/2 circa 2.
Nessun problema se utilizzando la stretchdraw non venissero fuori problemi
di memoria...
Ora ecco cosa si potrebbe provare : invece di stampare tutti e 1616 i twips,
si potrebbe riempire il Canvas di Printer con 800 (quelli originari) pixel,
lasciandone di "bianchi". Magari alternando il metodo in modo da ottenere
una specie di "scacchiera":
1###1###1###1###1
##1###1###1###1###1
1###1###1###1###1
Spero (e dico spero perchè non ne ho idea!!) che in questo modo lo spooler
di windows riesca a risparmiare memoria e quindi farci contenti...
Ok... se qualcuno prova questo metodo e funziona... (tanto non andrà ...
sano pessimismo...), vi prego avvisatemi!!
Ciao e in bocca al lupo!   Davide DG