Avatar billede ossian Nybegynder
07. juni 2006 - 21:24 Der er 8 kommentarer og
2 løsninger

Konvertering: C# til VB.Net

Hejsa,

Er der nogen der kan og vil hjælpe mig med at konvertere nedenstående C# kode til VB.Net?

-----------------------------------------

string FileToResize = Server.MapPath("~/images/1.jpg");
using(Bitmap originalBitmap = Bitmap.FromFile(FileToResize, true) as Bitmap, newbmp = new Bitmap(100,100))
{
    double WidthVsHeightRatio = (float)originalBitmap.Width / (float)originalBitmap.Height;

    using(Graphics newg = Graphics.FromImage(newbmp))
    {
        newg.Clear(Color.White);
        if(WidthVsHeightRatio == 1d)
        {
            newg.DrawImage(originalBitmap, 0, 0, 100, 100);
            newg.Save();
        }

        else if(WidthVsHeightRatio < 1d) //Image is taller than wider
        {
            newg.DrawImage(originalBitmap, new RectangleF(new PointF((float)(50 - ((100 * WidthVsHeightRatio) / 2)), 0), new SizeF((float)(100 * WidthVsHeightRatio), 100f)));
            newg.Save();
        }

        else //Image is wider than taller
        {
            double inverse = Math.Pow(WidthVsHeightRatio, -1);
            newg.DrawImage(originalBitmap, new RectangleF(new PointF(0, (float)(50 - ((100 * inverse) / 2))), new SizeF(100f, (float)(100 * inverse))));
            newg.Save();
            newg.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality;
        }
    }

    newbmp.Save(Server.MapPath("~/images/1_resized.jpg"), System.Drawing.Imaging.ImageFormat.Jpeg);
-----------------------------------------

På horhånd tak :-)
Avatar billede dr_chaos Nybegynder
07. juni 2006 - 21:29 #1
En del af det:
Dim WidthVsHeightRatio As Double = CType(originalBitmap.Width, Single) / CType(originalBitmap.Height, Single)
' Using
Dim newg As Graphics = Graphics.FromImage(newbmp)
Try
newg.Clear(Color.White)
If WidthVsHeightRatio = 1 Then
  newg.DrawImage(originalBitmap, 0, 0, 100, 100)
  newg.Save
Else
  If WidthVsHeightRatio < 1 Then
    newg.DrawImage(originalBitmap, New RectangleF(New PointF(CType((50 - ((100 * WidthVsHeightRatio) / 2)), Single), 0), New SizeF(CType((100 * WidthVsHeightRatio), Single), 100F)))
    newg.Save
  Else
    Dim inverse As Double = Math.Pow(WidthVsHeightRatio, -1)
    newg.DrawImage(originalBitmap, New RectangleF(New PointF(0, CType((50 - ((100 * inverse) / 2)), Single)), New SizeF(100F, CType((100 * inverse), Single))))
    newg.Save
    newg.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality
  End If
End If
Finally
CType(newg, IDisposable).Dispose()
End Try
Avatar billede dr_chaos Nybegynder
07. juni 2006 - 21:29 #2
newbmp.Save(Server.MapPath("~/images/1_resized.jpg"), System.Drawing.Imaging.ImageFormat.Jpeg)
Avatar billede dr_chaos Nybegynder
07. juni 2006 - 21:33 #3
Dim FileToResize As String = Server.MapPath("~/images/1.jpg")
Dim originalBitmap As Bitmap = CType(ConversionHelpers.AsWorkaround(Bitmap.FromFile(FileToResize, True), GetType(Bitmap)), Bitmap)
Dim newbmp As Bitmap = New Bitmap(100, 100)
Dim WidthVsHeightRatio As Double = CType(originalBitmap.Width, Single) / CType(originalBitmap.Height, Single)
' Using
Dim newg As Graphics = Graphics.FromImage(newbmp)
Try
newg.Clear(Color.White)
If WidthVsHeightRatio = 1 Then
  newg.DrawImage(originalBitmap, 0, 0, 100, 100)
  newg.Save
Else
  If WidthVsHeightRatio < 1 Then
    newg.DrawImage(originalBitmap, New RectangleF(New PointF(CType((50 - ((100 * WidthVsHeightRatio) / 2)), Single), 0), New SizeF(CType((100 * WidthVsHeightRatio), Single), 100F)))
    newg.Save
  Else
    Dim inverse As Double = Math.Pow(WidthVsHeightRatio, -1)
    newg.DrawImage(originalBitmap, New RectangleF(New PointF(0, CType((50 - ((100 * inverse) / 2)), Single)), New SizeF(100F, CType((100 * inverse), Single))))
    newg.Save
    newg.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality
  End If
End If
Finally
CType(newg, IDisposable).Dispose()
End Try
newbmp.Save(Server.MapPath("~/images/1_resized.jpg"), System.Drawing.Imaging.ImageFormat.Jpeg)
Avatar billede dr_chaos Nybegynder
07. juni 2006 - 21:34 #4
Avatar billede nielle Nybegynder
07. juni 2006 - 22:00 #5
En using i C# betyder at der kaldes en Dispose i sliutningen. Derfor er denne oversættesle måske en smule mere korrekt:

        Dim FileToResize As String = Server.MapPath("~/images/1.jpg")

        Dim originalBitmap As Bitmap = Bitmap.FromFile(FileToResize, True)
        Dim newbmp As Bitmap = New Bitmap(100, 100)

        Dim WidthVsHeightRatio As Double = CType(originalBitmap.Width, Single) / CType(originalBitmap.Height, Single)

        Dim newg As Graphics = Graphics.FromImage(newbmp)

        newg.Clear(Color.White)
        If WidthVsHeightRatio = 1D Then
            newg.DrawImage(originalBitmap, 0, 0, 100, 100)
            newg.Save()
        ElseIf WidthVsHeightRatio < 1D Then    'Image is taller than wider
            newg.DrawImage(originalBitmap, New RectangleF(New PointF(CType(50 - 100 * WidthVsHeightRatio / 2, Single), 0), New SizeF(CType(100 * WidthVsHeightRatio, Single), 100.0F)))
            newg.Save()
        Else
            Dim inverse As Double = Math.Pow(WidthVsHeightRatio, -1)
            newg.DrawImage(originalBitmap, New RectangleF(New PointF(0, CType(50 - 100 * inverse / 2, Single)), New SizeF(100.0F, CType(100 * inverse, Single))))
            newg.Save()
            newg.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality
        End If


        newbmp.Save(Server.MapPath("~/images/1_resized.jpg"), System.Drawing.Imaging.ImageFormat.Jpeg)

        ' Her mangler måske noget af den kode du ikke har postet.

        originalBitmap.Dispose()
        newbmp.Dispose()
Avatar billede nielle Nybegynder
07. juni 2006 - 22:02 #6
Hov, glemte en enkelt Dispose:

        Dim FileToResize As String = Server.MapPath("~/images/1.jpg")

        Dim originalBitmap As Bitmap = Bitmap.FromFile(FileToResize, True)
        Dim newbmp As Bitmap = New Bitmap(100, 100)

        Dim WidthVsHeightRatio As Double = CType(originalBitmap.Width, Single) / CType(originalBitmap.Height, Single)

        Dim newg As Graphics = Graphics.FromImage(newbmp)

        newg.Clear(Color.White)
        If WidthVsHeightRatio = 1D Then
            newg.DrawImage(originalBitmap, 0, 0, 100, 100)
            newg.Save()
        ElseIf WidthVsHeightRatio < 1D Then    'Image is taller than wider
            newg.DrawImage(originalBitmap, New RectangleF(New PointF(CType(50 - 100 * WidthVsHeightRatio / 2, Single), 0), New SizeF(CType(100 * WidthVsHeightRatio, Single), 100.0F)))
            newg.Save()
        Else 'Image is wider than taller
            Dim inverse As Double = Math.Pow(WidthVsHeightRatio, -1)
            newg.DrawImage(originalBitmap, New RectangleF(New PointF(0, CType(50 - 100 * inverse / 2, Single)), New SizeF(100.0F, CType(100 * inverse, Single))))
            newg.Save()
            newg.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality
        End If

        newg.Dispose()

        newbmp.Save(Server.MapPath("~/images/1_resized.jpg"), System.Drawing.Imaging.ImageFormat.Jpeg)

        ' Her mangler måske noget af den kode du ikke har postet.

        originalBitmap.Dispose()
        newbmp.Dispose()
Avatar billede ossian Nybegynder
11. juni 2006 - 14:57 #7
Hej med jer,

Jeg beklager min sene tilbagemelding - jeres svar er bestemt værdsatte!!

Jeg har prøvet begge forslag, og er endt med at benytte nielles, da dr chaos' gav mig fejl.

Jeg vil gerne fordele pointene ml. jer med 150 til Nielle og 50 til dr chaos - så smid et svar..

Endnu engang tak!
Avatar billede dr_chaos Nybegynder
11. juni 2006 - 15:10 #8
svar :)
Avatar billede nielle Nybegynder
11. juni 2006 - 15:35 #9
Svar :^)
Avatar billede ossian Nybegynder
11. juni 2006 - 15:39 #10
Tak :-)
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
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

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