Avatar billede nik- Nybegynder
28. juli 2004 - 23:14 Der er 2 kommentarer

resize billede i picturebox

Hvordan får jeg tilpasset et givent billede i en picturebox?
Jeg har f.eks. et billede på 1230x1250 pixels som jeg gerne vil vise i en ("mindre") picturebox på 200x200. Som det er nu vises der kun de øverser venstre 200x200 pixels - det er altså ikke skaleret.
Og aspekt-ratio skal for øvrigt bevares.
.SizeMode kan ikke bruges da den ødelægger aspekt-ratio.
Avatar billede clausc Nybegynder
29. juli 2004 - 09:57 #1
En (besværlig) måde kunne være at lave en bitmap med den korrekte ratio, og som er stor nok til at rumme det billede du ønsker at vise.

VB.Net kode i stil med flg (ikke testet og jeg koder 99% af tiden i c#):

Dim img_orig As Image
'Det er dit oprindelige billede. Hvordan du loader det
'ind i img_orig afhænger helt af din app


Dim x As Integer
x = Math.Max(img_orig.Width, img_orig.Height)

'Dit eksempel bruger aspect = 1:1; men det er
'simpelt at vælge et andet forhold
Dim img_new As Bitmap(x, x)

Dim g As Graphics
g = Graphics.FromImage(img_new)

'Her tegner jeg det oprindelige billede i (0,0)
'Det er ikke så svært at centrere det i stedet
g.DrawImageUnscaled(img_orig, 0, 0)

g.Dispose()

somePictureBox.Image = img_new
Avatar billede unicron Nybegynder
28. oktober 2004 - 20:11 #2
Hej jeg fandt en stump code (se nedenfor), har lavet den om til en funktion der modtager 'sScale', som er aspect ratio. Og dit Image.

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        ImgReSize(txtScale.Text, PictureBox1.Image)
End Sub   

Public Function ImgReSize(ByVal sScale As String, ByVal YoureImage As Image) As Image
        'Fundet sampel på. http://www.vb-helper.com/howto_net_image_resize.html
        ' Get the scale factor.
        Dim scale_factor As Single = Single.Parse(sScale)

        ' Get the source bitmap.
        Dim bm_source As New Bitmap(YoureImage)

        ' Make a bitmap for the result.
        Dim bm_dest As New Bitmap( _
            CInt(bm_source.Width * scale_factor), _
            CInt(bm_source.Height * scale_factor))

        ' Make a Graphics object for the result Bitmap.
        Dim gr_dest As Graphics = Graphics.FromImage(bm_dest)

        ' Copy the source image into the destination bitmap.
        gr_dest.DrawImage(bm_source, 0, 0, _
            bm_dest.Width + 1, _
            bm_dest.Height + 1)

        ' Display the result.
        Return bm_dest
    End Function
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester