Avatar billede agerled Nybegynder
25. januar 2006 - 08:59 Der er 11 kommentarer og
1 løsning

image resize kode

Hej.

Er der nogen som ligger ind med noget godt kode til at resize billeder så de beholder størrelses forholdet....
Avatar billede bernhof Nybegynder
25. januar 2006 - 09:28 #1
Følgende funktion returnerer et resized billede, hvis du giver den billedet (pSourceBitmap), som skal resizes, samt den nye bredde (pNewWidth). Højden beregnes automatisk, så størrelsesforholdet bevares:

  Public Function ResizeBitmap(ByVal pSourceBitmap As Bitmap, _
                              ByVal pNewWidth As Int32) As Bitmap
    Dim lNewHeight As Int32
    lNewHeight = CType(pSourceBitmap.Height * (pNewWidth / pSourceBitmap.Width), Int32)
    Dim lResizedBitmap As New Bitmap(pNewWidth, pNewHeight)
    Dim lGraphics As Graphics = Graphics.FromImage(lResizedBitmap)
    lGraphics.DrawImage(pSourceBitmap, 0, 0, pNewWidth, pNewHeight)
    Return lResizedBitmap
  End Function


Her er en anden udgave, hvor du giver den højden, og bredden beregnes automatisk:

  Public Function ResizeBitmap(ByVal pSourceBitmap As Bitmap, _
                              ByVal pNewWidth As Int32) As Bitmap
    Dim lNewHeight As Int32
    lNewHeight = CType(pSourceBitmap.Height * (pNewWidth / pSourceBitmap.Width), Int32)
    Dim lResizedBitmap As New Bitmap(pNewWidth, pNewHeight)
    Dim lGraphics As Graphics = Graphics.FromImage(lResizedBitmap)
    lGraphics.DrawImage(pSourceBitmap, 0, 0, pNewWidth, pNewHeight)
    Return lResizedBitmap
  End Function
Avatar billede bernhof Nybegynder
25. januar 2006 - 09:31 #2
Argh! Jeg prøver lige igen. De skulle se således ud :o)

  Public Function ResizeBitmap(ByVal pSourceBitmap As Bitmap, _
                              ByVal pNewWidth As Int32) As Bitmap
    Dim lNewHeight As Int32
    lNewHeight = CType(pSourceBitmap.Height * (pNewWidth / pSourceBitmap.Width), Int32)
    Dim lResizedBitmap As New Bitmap(pNewWidth, lNewHeight)
    Dim lGraphics As Graphics = Graphics.FromImage(lResizedBitmap)
    lGraphics.DrawImage(pSourceBitmap, 0, 0, pNewWidth, lNewHeight)
    Return lResizedBitmap
  End Function


Her er den anden udgave:


  Public Function ResizeBitmap(ByVal pSourceBitmap As Bitmap, _
                              ByVal pNewHeight As Int32) As Bitmap
    Dim lNewWidth As Int32
    lNewWidth = CType(pSourceBitmap.Width * (pNewHeight / pSourceBitmap.Height), Int32)
    Dim lResizedBitmap As New Bitmap(lNewWidth, pNewHeight)
    Dim lGraphics As Graphics = Graphics.FromImage(lResizedBitmap)
    lGraphics.DrawImage(pSourceBitmap, 0, 0, lNewWidth, pNewHeight)
    Return lResizedBitmap
  End Function
Avatar billede agerled Nybegynder
25. januar 2006 - 09:48 #3
ok det vil jeg lige afprøve. Kan man angive en hvilken som helst billedtype. altså JPG osv....
Avatar billede bernhof Nybegynder
25. januar 2006 - 09:55 #4
Du kan angive dem som nu engang understøttes af .NET frameworket -- hvilke det helt præcis er, ved jeg faktisk ikke, men JPG er i hvert fald én af dem. Prøv dig frem :-)
Avatar billede bernhof Nybegynder
25. januar 2006 - 10:01 #5
Fandt følgende liste over billedtyper, som understøttes af .NET:

BMP (Bitmap)
EMF (Enhanced Windows Metafile)
EXIF (Exchangeable Image File)
GIF (Graphics Interchange Format)
Icon (Windows Icon)
JPEG (Joint Photographic Experts Group)
MemoryBmp (Memory Bitmap)
PNG (W3C Portable Network Graphics)
TIFF (Tag Image File Format)
WMF (Windows Metafile)
Avatar billede agerled Nybegynder
25. januar 2006 - 10:06 #6
Tak.

Jeg har afprøvet funktionerne, men jeg kan se at når jeg resizer til små størrelse så bliver kvaliteten meget dårlig. Hvad kan man gøre ved det???
Avatar billede agerled Nybegynder
25. januar 2006 - 10:11 #7
jeg bruger vs2005 hvis det har nogen betydning...
Avatar billede bernhof Nybegynder
25. januar 2006 - 10:19 #8
Hmm... Har brugt koden selv en del gange, og synes ellers ikke jeg har lagt mærke til en forringelse i kvalitet.

Hvilken billedetype arbejder du med, og når du siger små størrelser, hvad er der så tale om?
Avatar billede agerled Nybegynder
25. januar 2006 - 10:25 #9
jeg bruger jpg og sætter bredden til mellem 50 og 60 ....??
Avatar billede bernhof Nybegynder
25. januar 2006 - 10:30 #10
Ok.

Prøv at skrive følgende lige inden lGraphics.DrawImage(...) linien:

  lGraphics.InterpolationMode = Drawing2D.InterpolationMode.HighQualityBilinear

Evt. eksperimenter med de andre high quality settings der findes til denne egenskab.
Avatar billede agerled Nybegynder
25. januar 2006 - 11:17 #11
Det er helt helt perfekt!! Jeg takker mange gange. Læg du bare et svar...
Avatar billede bernhof Nybegynder
25. januar 2006 - 11:27 #12
Det var så lidt :o)
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