Toon posts:

[VB] thumbnail maken van picturebox?

Pagina: 1
Acties:

Verwijderd

Topicstarter
Mensen,

VisualBASIC heeft zich weer geinstalleerd op mijn pc en ik ben er weer mee aan de gang gegaan. Een oude project waarmee je 'images' kon uploaden naar 'gratis image hosters' ben ik wezen ombouwen voor mijn QuickUpload site, deze alleen te gebruiken is indien je de 'code' weet.

Met het programma kan je bestanden selecteren, zodat je een preview te zien krijgt, in een hidden picturebox (variabel) laad ik het gehele plaatje en met de volgende routine probeer ik de thumbnail versie ervan in een andere picturebox te zetten maar dit werkt niet naar behoren; sterker nog ik zie geen thumbnail.

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
Private Sub thumbGenerateStatus()
'Created by Muzaffar
'In my program "picThumb" is the picturebox to display the thumnail while as 'pic1 is the hidden picturebox to load pictures

'On Error Resume Next
'Generate thumbnail images of larger images
    Dim dw, sw, dh, sh, newsh, newsw

    picThumb.Cls
    sw = pic1.Width
    sh = pic1.Height

    dw = picThumb.Width
    dh = picThumb.Height

    If pic1.Height < picThumb.Height And pic1.Width < picThumb.Width Then
      Dim centerX, centerY As Integer
      'if Source picture is smaller than the destination thumnail then just paint and center it on thumnail
      centerX = (picThumb.Width - pic1.Width) / 2
      centerY = (picThumb.Height - pic1.Height) / 2
      picThumb.PaintPicture pic1.Picture, centerX, centerY
      newsw = pic1.Picture.Width
      newsh = pic1.Picture.Height
    Else 'If the source dimensions are bigger than the thumbnail then adjust the height and with proportionately
        If sw > sh Then
           newsw = dw
           newsh = Round(sh * (dw / sw))
            If newsh > dh Then
               newsh = dh
               newsw = (sw * (dh / sh))
           End If
        Else
           newsh = dh
           newsw = Round(sw * (dh / sh))
            If newsw > dw Then
               newsw = dw
               newsh = (sh * (dw / sw))
           End If
        End If
        Dim dx, dy
        picThumb.Picture = LoadPicture()
        
        picThumb.PaintPicture pic1.Picture, Round((dw - newsw) / 2), Round((dh - newsh) / 2), Round(newsw), Round(newsh)
    End If
    
    pic1.Picture = LoadPicture()

End Sub


natuurlijk heb ik deze functie niet zelf geschreven maar idd je hoeft het wiel niet steeds uit te vinden..

maar het werkt niet, ik roep de functie zo aan.

code:
1
2
pic1.Picture = LoadPicture("c:\test.jpg")
Call thumbGenerateStatus


nu moet pic1 voorzien zijn van de gehele image en picThumb voorzien zijn van het thumbnailtje; maar helaas.

Heeft iemand mischien een idee wat er fout kan gaan en of hoe ik er achter kan komen waar de fout zit?

  • Super_ik
  • Registratie: Maart 2001
  • Laatst online: 21:19

Super_ik

haklust!

t werkt bij mij gewoon :?
visual basic 5 trouwens, dus ik heb round vervangen door int

owja, in regel 43 heb ik pic1.picture vervangen door pic1

maar t werkt allebij

[ Voor 59% gewijzigd door Super_ik op 30-09-2004 11:39 ]

8<------------------------------------------------------------------------------------
Als ik zo door ga haal ik m'n dood niet. | ik hou van goeie muziek


Verwijderd

Topicstarter
vaag; dan snap ik niet waarom het niet werkt bij mij, jij hebt ook een nieuw projectje opgezet om even te testen?...

  • Super_ik
  • Registratie: Maart 2001
  • Laatst online: 21:19

Super_ik

haklust!

yup :) k denk dat je probleem ergens anders zit. maak die pic1 eens niet hidden marr visible en kijk of hier t plaatje wel in geladen wordt.

regel 46 lijkt me trouwens ook overbodig

[ Voor 5% gewijzigd door Super_ik op 30-09-2004 11:44 ]

8<------------------------------------------------------------------------------------
Als ik zo door ga haal ik m'n dood niet. | ik hou van goeie muziek


Verwijderd

Topicstarter
Ja, ik heb even getest met een nieuw projectje...

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
Private Sub thumbGenerateStatus()
'Created by Muzaffar
'In my program "picThumb" is the picturebox to display the thumnail while as 'pic1 is the hidden picturebox to load pictures

'On Error Resume Next
'Generate thumbnail images of larger images
    Dim dw, sw, dh, sh, newsh, newsw

    picThumb.Cls
    sw = Pic1.Width
    sh = Pic1.Height

    dw = picThumb.Width
    dh = picThumb.Height

    If Pic1.Height < picThumb.Height And Pic1.Width < picThumb.Width Then
      Dim centerX, centerY As Integer
      'if Source picture is smaller than the destination thumnail then just paint and center it on thumnail
      centerX = (picThumb.Width - Pic1.Width) / 2
      centerY = (picThumb.Height - Pic1.Height) / 2
      picThumb.PaintPicture Pic1.Picture, centerX, centerY
      newsw = Pic1.Picture.Width
      newsh = Pic1.Picture.Height
    Else 'If the source dimensions are bigger than the thumbnail then adjust the height and with proportionately
        If sw > sh Then
           newsw = dw
           newsh = Round(sh * (dw / sw))
            If newsh > dh Then
               newsh = dh
               newsw = (sw * (dh / sh))
           End If
        Else
           newsh = dh
           newsw = Int(sw * (dh / sh))
            If newsw > dw Then
               newsw = dw
               newsh = (sh * (dw / sw))
           End If
        End If
        Dim dx, dy
        picThumb.Picture = LoadPicture()
        
        picThumb.PaintPicture Pic1, Round((dw - newsw) / 2), Round((dh - newsh) / 2), Round(newsw), Round(newsh)
    End If
    
    ' Pic1.Picture = LoadPicture()

End Sub


Private Sub Form_Load()
    Pic1.Picture = LoadPicture("c:\test.jpg")
    Call thumbGenerateStatus
End Sub


plus 2 willekeurige niet aangepaste pictureboxes genaamd Pic1 en picThumb, maar toch werkt het niet... erg erg erg vaag :'(

ik zie echter nu een gedeelte van het plaatje in pic1 dus dat werkt.

[ Voor 11% gewijzigd door Verwijderd op 30-09-2004 11:50 . Reden: [/sup] ]


  • Super_ik
  • Registratie: Maart 2001
  • Laatst online: 21:19

Super_ik

haklust!

probeer toch eens int ipv round dan :p

k zie dat he t doet bij form_load()

zet het eens in een command1_click() en maak ff een knoppie.

als het form geladen wordt is er grafisch nog nix aan de gang. de kasn bestaat dus dat je sub al is uitgevoert voordat er iets getekent kan worden.

bij form_paint() zou het wel moeten werken. maar knopje is betrouwbaarder :)

zorg er ook voor dat pic1 groter is dan picthumb

[ Voor 89% gewijzigd door Super_ik op 30-09-2004 11:55 ]

8<------------------------------------------------------------------------------------
Als ik zo door ga haal ik m'n dood niet. | ik hou van goeie muziek


Verwijderd

Topicstarter
helaas pindakaas, ook dat werkte niet. VB6.0.. Zal ik eens het stukje code zippen en uploaden?

met een knopje krijg ik opeens wel een resultaat in picThumb (raar???) maar niet verkleind zoals deze functie zou moeten doen.

[ Voor 41% gewijzigd door Verwijderd op 30-09-2004 11:57 ]


  • Super_ik
  • Registratie: Maart 2001
  • Laatst online: 21:19

Super_ik

haklust!

is goed

8<------------------------------------------------------------------------------------
Als ik zo door ga haal ik m'n dood niet. | ik hou van goeie muziek


  • Super_ik
  • Registratie: Maart 2001
  • Laatst online: 21:19

Super_ik

haklust!

http://84.24.248.39/got.zip works just fine :?

8<------------------------------------------------------------------------------------
Als ik zo door ga haal ik m'n dood niet. | ik hou van goeie muziek


Verwijderd

Topicstarter
vraagje? waar zit het verschil? :D

  • Super_ik
  • Registratie: Maart 2001
  • Laatst online: 21:19

Super_ik

haklust!

werkt ie dan?

8<------------------------------------------------------------------------------------
Als ik zo door ga haal ik m'n dood niet. | ik hou van goeie muziek


Verwijderd

let er even op dat in het form_load event controls nog niet alle goede properties hoeven te bevatten ( zoals width en height etc.). Dat kan een deel van je probleem zijn.

Verwijderd

Topicstarter
jou versie wel mijne niet, maar ik heb het al een klein beetje door..

kort vraagje nog, stel ik wil via een functie doorgeven welke picturebox ik wil gebruiken kan ik deze gewoon meegeven in de variabelen?

cq. Private Sub thumbGenerateStatus(ByVal target As String)

want ik krijg nu een error "invalid qualifier" :?

  • Super_ik
  • Registratie: Maart 2001
  • Laatst online: 21:19

Super_ik

haklust!

target as picturebox :)

8<------------------------------------------------------------------------------------
Als ik zo door ga haal ik m'n dood niet. | ik hou van goeie muziek


Verwijderd

Topicstarter
tis dat ik hier geen MSN smilies kan gebruiken maar (K) :P

Het werkt! :)
Pagina: 1