Newsgroup: it.comp.lang.visual-basic
Titolo: vb6: GDI+ e assegnazione thumbnail in memoria a picture...sul form!

Allora il mio mal di testa aumenta
son riuscito a trovare un wrapper ...in forma piana e sintetica....
Questo il codice che mi carica una thumbnail da una immagine
Private Sub CmdLoad_Click()
   Dim graphics As Long, img As Long, imgThumb As Long
   Dim lngHeight As Long, lngWidth As Long
   ' Initializations
   Call GdipCreateFromHDC(Me.hdc, graphics) ' Initialize the graphics
class - required for all drawing
   Call GdipLoadImageFromFile(StrConv(App.path & "\imgtest.jpg",
vbUnicode), img)   ' Load the image
   ' Create the thumbnail that is 100x100 in size
   Call GdipGetImageThumbnail(img, 100, 100, imgThumb)
   ' Get the image height and width
   ' NOTE: Could also skip this and use the hard-coded/predefined
values to save memory and time.
   Call GdipGetImageHeight(imgThumb, lngHeight)
   Call GdipGetImageWidth(imgThumb, lngWidth)
   ' Draw the thumbnail image unaltered
   Call GdipDrawImageRectI(graphics, img, 10, 10, lngWidth, lngHeight)
   ' Cleanup
   Call GdipDisposeImage(img) ' Delete the image
   Call GdipDisposeImage(imgThumb) ' Delete the thumbnail image
   Call GdipDeleteGraphics(graphics)
End Sub
Logicamente l'inizializzazione delle GDI+ è fatto e tutto
Bon...la riga magica è
   Call GdipDrawImageRectI(graphics, img, 10, 10, lngWidth, lngHeight)
che fa apparire la thumb sulla form di prova
Sarà il sonno....che stasera ho....sarà che l'inglese comincia a
starmi sulle palle....mi sto perdendo in un bicchier d'acqua
IO VORREI
assegnare la mia bitmap bella li ..in memoria...ad aspettarmi
ad una picture!
Ho provato
Call GdipDrawImage(graphics, Me.Pic1.hDC , 200, 100)
....
Call GdipDrawImage(graphics, Me.Pic1.HasDC, 200, 100)
......
Call GdipDrawImage(graphics, Me.Pic1.Picture.Handle, 200, 100)
......
Fin qui esplode il programma e mi chiude vb6
Call GdipDrawImage(graphics, Me.Pic1.Picture, 200, 100)
Questo invece è più "cortese" si limita a non fare nulla!
HELP
come faccio ad assegnare sta stracaz<biip> di immagine in memoria ad
una picture per visualizzarla???
Se riesco a farla sta cosa son a posto...e posso smetterla con le
aspirine!
Ma stasera non ci riesco....
sigh....
invecchio male!

Wodka40[Google] ha scritto:

Senza la classe è dura...
Da quanto capito in [img] e in [imgThumb] ho l'handle dell'immagine e
del Thumb
quindi nè la proprietà Picture del controllo PictureBox nè l'hDC
della pictureBox
possono andare....!
Quello che non capisco è cosa è graphics un handle associato alla
classe o cos'altro...!
Quello che dovrebbe andare è Me.Pic1.Picture.Handle ma c'è qualcosa
che non mi torna ugualmente...!
Esempio:
assumendo di voler mettere la Thumb nella PictureBox ed avendo l'Handle
io farei
così:
     lngRet = DrawIcon(Picture1.hdc, 0, 0, imgThumb)
    Picture1.Refresh
Quello che non sò è cosa faccia il metodo GdipDrawImage della
classe....
Bella la classe però .... magari pubblica...?
@Alex

 Questo il codice che mi carica una thumbnail da una immagine
Fammi capire... tu usi GDI+ da VB6?
Buona fortuna :P
Ciao 

 Ciao
Inutile che fai tanto il "grosso"
utilizzando il NET...
:o)
per vb6
Di fatto trovi ottimi wrapper a giro per la rete (il più famoso lo
trovi su vbAccelerator)...
Quello che sto facendo non è complicatissimo...si tratta solo di
caricare delle immagini da una dir....e francamente ce l'ho fatta
benissimo....spippolando e con un po di aspirina!
Avevo sviluppato tutto con vbAccelerator e il suo wrapper con classi e
classettine
[Logicamente sarebbe molto bello poter avere un abbo universal a MSDN e
avere la doc in italiano su come funzionano le GDI+ (ma dubito che ci
sia in italiano...ho trovato la descrizione delle api (molto scarna per
altro)in inglese su msdn online)]
Il mio pallino era quello di dire ....ho fatto 29 ...facciamo 30!!!
Cosa volevo fare???
.....volevo far fare in automatico anche le thumb delle immagini che si
tira dentro dalla dir...estremamente comodo se voglio aggiornare la mia
web gallery
ed ho buttato via tutto e ritirato fuori quel vecchio esempio che non
ha bisogno di tirar dentro wrapper e typelib...avendo un modulo che fa
tutto lui!
La fonte?
Beh citata anche da vbAccelarator
http://www.Planet-Source-Code.com/vb/scripts/ShowCode.asp?txtCodeId=37541&lngWId=1
Se scarichi l'esempio e togli il commento a quello che vuoi vedrai che
fa un sacco di cose carine (e parecchie per me assolutamente inutili)
CONCLUSIONE:
Vero che rispetto a NET ci sarà da capire bene cosa fare....
MA...
la velocità che "spremo" io ...tu te la sogni!...e siccome ho a che
fare con dir di immagini...la velocità non è mai troppa
INOLTRE....
in NET è un po che ho fatto questa cosa
http://www.villaceleste.it/Gestione/NetGallery/default.aspx
va da quanto che è li....!!!
FINALE:
Volete mettere la soddisfazione di usare il VB6.....
è ancora il NG del vb6 questo no???
pensa che GbC usa ancora il vb5!!!

 > class - required for all drawing
ZAC
Grazie mille di avermi fatto pensare.....
il trucco è qui
di fatto chiamare
GdipCreateFromHDC
ossia:
Public Declare Function GdipCreateFromHDC Lib "gdiplus" (ByVal hdc As
Long, graphics As Long) As GpStatus
secondo MSDN
http://windowssdk.msdn.microsoft.com/en-us/library/ms534038.aspx
Equivarrebbe ad inizializzare la classe grafica con il dispositivo di
visualizzazione scelto
Nel mio caso....tirando giu ieri notte l'esempio...
Call GdipCreateFromHDC(Me.hdc, graphics)
ora adesso leggendo le tue perplessità....
ho fatto
Call GdipCreateFromHDC(Pic1.hdc, graphics)
e TA-DAH!
Fa tutto dentro la picture Pic1....
GANZO...tutto molto MOOOLTO ganzo!
Dubito di non trovare ancora scogli....adesso provo a salvare in jpeg e
vedere quello che succede!
p.s.
graphics
se il prototipo secondo M$ è
GpStatus WINGDIPAPI GdipCreateFromHDC(HDC hdc, GpGraphics **graphics)
graphic dovrebbe essere il riferimento al contesto di visualizzazione
creato in memoria...da passare a tutte la varie funz sotto per fare
qualcosa su quella "periferica"....almeno da quello che mi ricordo di C
"**" è un puntatore a puntatore...in vb6 credo diventi "roba solo da
passare in lettura e NON da impostare" 
Boh!

 :o)
In realtà lo dico perchè ho provato anch'io a fare un wrapper per gdi+ per 
vb6, ma era talmente complesso che ho piantato li tutto.
Ciao
I choose Polesoft Lockspam to fight spam, and you?
http://www.polesoft.com/refer.html
 

 Ciao
Ah, dimenticavo:   :)
