Newsgroup: it.comp.lang.visual-basic
Titolo: [!]Stampare piu' TIFF con controllo Kodak [LONG]

Prosegue dal thread:
"Stampare piu' immagini su uno stesso foglio" di Luca Rinaldi del
21/05/02.
Il problema consisteva nello stampare piu' immagini formato TIFF (non
supportate dai controlli Image e PictureBox) su uno stesso foglio.
<OT><FLAME>
Dopo innumerevoli indicazioni e suggerimenti Luca Rinaldi e' ancora in
alto mare. Pur avendo mostrato una certa indole trolleggiante, ho voluto
realizzare (in circa mezz'ora) quello che da 3 giorni e con chiare
indicazioni Luca non ha neanche provato a fare.
</FLAME></OT>
1) Aprire un nuovo progetto
2) Inserire sul form una Picture Box (Picture1) ed un controllo
"controllo modifica immagine Kodak" (ImgEdit1)
3) Copiare il codice riportato qui sotto nel modulo del form e salvare i
file progetto in una cartella a piacere.
4) Inserire 3 immagini TIFF (1.tif, 2.tif, 3.tif) nella cartella ove si
e' salvato il progetto.
5) Accendere la stampante predefinita e verificare che sia collegata al
PC (!)
6) Eseguire il programma
La spiegazione del programma e dei passi seguiti per realizzarlo in un
messaggio successivo.
Lokar
***** BEGIN SNIPPET *****
Option Explicit
Private Sub ConvertToBitmap(ByVal sFileName As String)
   ImgEdit1.Image = sFileName
   ImgEdit1.Display
   Do While ImgEdit1.ImageDisplayed = False
      DoEvents
   Loop
   Picture1.Width = ImgEdit1.ImageWidth * Screen.TwipsPerPixelX
   Picture1.Height = ImgEdit1.ImageHeight * Screen.TwipsPerPixelY
   ImgEdit1.PrintImage , , 1, False, Picture1.hdc
   Picture1.Refresh
End Sub
Private Sub Form_Load()
   Picture1.AutoRedraw = True
   Printer.NewPage
   ConvertToBitmap App.Path & "\1.tif"
   Printer.PaintPicture Picture1.Image, 0, (Printer.Height / 3) * 0,
Printer.Width, Printer.Height / 3
   ConvertToBitmap App.Path & "\2.tif"
   Printer.PaintPicture Picture1.Image, 0, (Printer.Height / 3) * 1,
Printer.Width, Printer.Height / 3
   ConvertToBitmap App.Path & "\3.tif"
   Printer.PaintPicture Picture1.Image, 0, (Printer.Height / 3) * 2,
Printer.Width, Printer.Height / 3
   Printer.NewPage
   Printer.EndDoc
End Sub
***** END SNIPPET *****
----------
Sito Comune: 
http://www.it-lang-vb.net/
Manifesto: 
http://www.it-lang-vb.net/docs/Manifesto.txt









6) Eseguire il programma

Lokar
***** BEGIN SNIPPET *****
Option Explicit


***** END SNIPPET *****
--
Sito Comune: 
http://www.it-lang-vb.net/
Manifesto: 
http://www.it-lang-vb.net/docs/Manifesto.txt

Di seguito il codice commentato.
Conoscendo l'oggetto Printer ed il controllo PictureBox, si trattava di
trovare un sistema (free) di convertire un file TIFF in BMP senza dover
studiare il formato TIFF 8-)
Premesse:
Poiche' il controllo Kodak puo' caricare immagini di svariati formati
(fra cui TIFF) ma:
- non dispone di proprieta' Picture ne' Image
- non ha hDC (handle ad un contesto di periferica)
- il metodo SaveAs (che "teoricamente" permette, fra gli altri, di
salvare in formato BMP) salva in un formato non valido per il controllo
PictureBox (mentre Paint Brush apre correttamente l'immagine... BOH?)
"Spulciando" fra i metodi di tale controllo, ho scoperto che era
possibile stampare in un hDC (anche se la guida del controllo stesso
riporta C++ only) .
Poiche' la PictureBox possiede un hDC, ho fatto alcune prove e sono
riuscito a "stamparvi dentro" l'immagine precedentemente caricata nel
controllo Kodak.
L'unico punto interrogativo e': perche' dopo aver stampato nell'hDC la
proprieta' Image e' valorizzata, mentre non lo e' la proprieta' Picture
(che resta pari a 0)?
Ecco il codice commentato. E' _evidente_ che la routine di stampa si
puo' adeguare secondo le esigenze. In ogni caso la conversione a bitmap
e' tutta nella sub ConvertToBitmap. Anche li' non c'e' controllo di
errore (tipo Dir(sFileName) <> vbNullString).
<FLAME>
Solo una dimostrazione di quello che si puo' fare con un "pizzico" di
impegno.
</FLAME>
Happy Coding a tutti =)
Lokar
P.S. Di seguito il codice commentato.
***** BEGIN SNIPPET *****
Option Explicit
Private Sub ConvertToBitmap(ByVal sFileName As String)
   'Carica il file nel controllo Kodak
   ImgEdit1.Image = sFileName
   'Lo visualizza
   ImgEdit1.Display
   'Attende che la visualizzazione sia completata
   Do While ImgEdit1.ImageDisplayed = False
      DoEvents
   Loop
   'Ridimensiona il controllo PictureBox
   'sulla dimensione dell'immagine
   Picture1.Width = ImgEdit1.ImageWidth * Screen.TwipsPerPixelX
   Picture1.Height = ImgEdit1.ImageHeight * Screen.TwipsPerPixelY
   'Stampa nel contesto di periferica della PictureBox
   'sfruttando la capacita' del controllo Kodak di
   'stampare in un contesto di periferica
   ImgEdit1.PrintImage , , 1, False, Picture1.hDC
   'Visualizza l'immagine nella PictureBox
   Picture1.Refresh
End Sub
Private Sub Form_Load()
   Picture1.AutoRedraw = True
   'Avvisa la stampante che si sta per stampare
   'una nuova pagina
   Printer.NewPage
   'Converte il TIFF in bitmap
   ConvertToBitmap App.Path & "\1.tif"
   'Lo stampa nel buffer della stampante "strechandolo" nel terzo
superiore del foglio
   Printer.PaintPicture Picture1.Image, 0, (Printer.Height / 3) * 0,
Printer.Width, Printer.Height / 3
   ConvertToBitmap App.Path & "\2.tif"
   'Lo stampa nel terzo centrale del foglio
   Printer.PaintPicture Picture1.Image, 0, (Printer.Height / 3) * 1,
Printer.Width, Printer.Height / 3
   ConvertToBitmap App.Path & "\3.tif"
   'Lo stampa nel terzo inferiore del foglio
   Printer.PaintPicture Picture1.Image, 0, (Printer.Height / 3) * 2,
Printer.Width, Printer.Height / 3
   'Avvisa la stampante che la pagina e' terminata
   Printer.NewPage
   'Avvisa la stampante che il documento e' terminato
   'La stampa inizia


Di seguito il codice commentato.
Tutto chiarissimo, io ero arrivato alla stampa con il metodo
Paintpicture che però stampa solo jpg quindi mi sono messo a cercare
un programma freeware che converte tif in jpg ma non sono riuscito a
trovare niente.
Poi ho visto la tua risposta e quasi sicuro di aver finalmente
risolto, grazie a te, mi sono messo a cercare questo benedetto
controllo della kodak ma venerdì sera e anche oggi dopo più due ore di
ricerca su internet (sarò imbranato!!?? Può darsi) ho trovato solo dei
vecchi link a delle pagine del 1999 o 2000 inesistenti che
permettevano di scaricare questo controllo, tra l'altro, in alcune
pagine era scritto che non si può distribuire nelle proprie
applicazioni.
Ho provato sul sito della kodak perchè ho visto nei vecchi messaggi di
google che è un controllo integrato in un programma che si chiama
"imaging" ma nessuna traccia neanche di questo.
Ma tu avevi già questo controllo? Oppure lo hai scaricato adesso?
Perchè io non lo trovo!!! Sarà compatibile con WinNT? BHo?
Comunque se mi dici l'indirizzo da dove lo hai scaricato, oppure se
puoi mandarmelo te ne sarò inifinitamente grato e così potro finire
questa cosa che altrimenti non penso di finire Ciao e grazie mille per
l'aiuto.

Sarà compatibile con WinNT? 
E' su tutti i windows fino a windows XP escluso.
-- 
ciao, hal

[cut]
Grazie mille ce l'avevo sull'hdar disk e non lo sapevo sigh!!

 Di seguito il codice commentato.
Ho trovato il controllo, ho fatto come hai detto tu ma col cacchio che
funziona,mi dice:
Chiamata di funzione non valida  Invalid printer name forse perchè ho
WinNT?
E' mai possibile che nessuno ha mai avuto la necessità di stampare delle
tif da visual basic? Problema irrisolvibile misa tanto....
-- 
Posted via Mailgate.ORG Server - 
http://www.Mailgate.ORG

 E' su tutti i windows fino a windows XP escluso.
Grazie hal, non credo che avrei retto a rispondere pure a questa... nota
che al punto 2)
mi sono premurato di inserire il nome del controllo cosi' come lo si
trova nella lista dei controlli di VB (dato che e' in ordine
alfabetico)!
Mi rimangono ancora le perplessita' espresse nella mia precedente:
1) Come mai dopo una stampa nell hDC la proprieta' Image e' valorizzata,
mentre la proprieta' Picture e' uguale a zero?
2) Come mai il metodo SaveAs del controllo Kodak salva in un formato
bitmap gradito da PaintBrush ma non dalla funzione LoadPicture?
Happy Coding =)
Un dubbioso Lokar


 > E' su tutti i windows fino a windows XP escluso.
se qualcuno ha dei win sottomano, p.f. puo' controllare ?
per quanto mi ricordo, il wang/kodak e' diverso nei vari win.
non so quanto compatibili siano le varie versioni.
gia' il nome, wang/kodak...
nel caso, non so se convenga dar fuori un compilato che faccia conto di
proprieta'/metodi del controllo. forse la cosa migliore e' provare il codice
sui tre sistemi / con i tre componenti e usarne caratteristiche che con
certezza ci sono sempre.



Era un probemaccio!!!
