Ich mache das ja schon lange.... und ich habe auch schon einiges mit Bildern zu tun gehabt.
Aber jedes mal wieder fummele ich mir aus alten Codes oder dem Internet die Funktionen für Größenveränderungen heraus.
Meist sind diese (vor allem bei gegoogelten Beispielen) gespickt mit Spezialfunktionalität.

Diesemal habe ich mir die Mühe gemacht - ein für alle Mal - drei Funktionen zu generieren, die sowohl Cropping, Resizing oder aber beides gleichzeitig in bestmöglicher Qualität zu liefern.

Und da ich meißt nur ein Stream oder Byte() benötige, bekomme ich as Rückgabewert auch ein MemoryStream.
Diesen kann ich in die Datenbank schieben oder per BinaryWrite direkt ausgeben. 

    1 Imports System

    2 Imports System.Drawing

    3 Imports System.Drawing.Imaging

    4 Imports System.IO

    5 Imports System.Drawing.Drawing2D

    6 

    7 Partial Class _default3

    8     Inherits System.Web.UI.Page

    9 

   10 

   11     Protected Sub Page_Load(ByVal sender As Object, _

   12                             ByVal e As System.EventArgs) Handles Me.Load

   13 

   14         Dim X1 As Integer = 30 'Ausschnitt-Punkt links

   15         Dim Y1 As Integer = 30 'Ausschnitt-Punkt oben

   16         Dim X2 As Integer = 120 'Ausschnitt-Punkt rechts

   17         Dim Y2 As Integer = 120 'Ausschnitt-Punkt unten

   18 

   19         Dim targetWidth = 150  'Neue Breite für resize

   20         Dim targetHeight = 200 'Neue Höhe für resize

   21 

   22         Dim img As Image = Image.FromFile("d:\myPath\test.png")

   23 

   24         Response.ContentType = "image/png"

   25         Response.StatusCode = 200

   26         Response.BinaryWrite( _

   27                 imageFunctions.cropAndResizeImage(img, _

   28                                                 targetWidth, _

   29                                                 targetHeight, _

   30                                                 X1, _

   31                                                 Y1, _

   32                                                 X2, _

   33                                                 Y2, _

   34                                    Imaging.ImageFormat.Png).ToArray)

   35         Response.End()

   36 

   37     End Sub

   38 

   39 

   40 

   41 

   42 End Class

   43 

   44 

   45 Class imageFunctions

   46     Public Shared Function cropAndResizeImage(ByVal img As Image, _

   47                                ByVal targetWidth As Integer, _

   48                                ByVal targetHeight As Integer, _

   49                                ByVal x1 As Integer, _

   50                                ByVal y1 As Integer, _

   51                                ByVal x2 As Integer, _

   52                                ByVal y2 As Integer, _

   53                                ByVal imageFormat As Imaging.ImageFormat _

   54                ) As MemoryStream

   55 

   56         Dim bmp As New System.Drawing.Bitmap(targetWidth, targetHeight)

   57         Dim g As Graphics = Graphics.FromImage(bmp)

   58 

   59         g.InterpolationMode = InterpolationMode.HighQualityBicubic

   60         g.SmoothingMode = SmoothingMode.HighQuality

   61         g.PixelOffsetMode = PixelOffsetMode.HighQuality

   62         g.CompositingQuality = CompositingQuality.HighQuality

   63 

   64         Dim width As Integer = x2 - x1

   65         Dim height As Integer = y2 - y1

   66 

   67         g.DrawImage(img, _

   68                     New Rectangle(0, 0, _

   69                                   CInt(targetWidth), _

   70                                   CInt(targetHeight) _

   71                                   ), _

   72                     x1, y1, width, height, _

   73                     GraphicsUnit.Pixel)

   74 

   75         Dim memStream As New MemoryStream

   76 

   77         bmp.Save(memStream, ImageFormat)

   78         Return memStream

   79 

   80     End Function

   81 

   82 

   83     'Daraus ergeben sich die folgenden Methoden resize und crop:

   84     Public Shared Function resizeImage(ByVal img As Image, _

   85                         ByVal targetWidth As Integer, _

   86                         ByVal targetHeight As Integer, _

   87                         ByVal imageFormat As Imaging.ImageFormat _

   88                 ) As MemoryStream

   89 

   90         Return cropAndResizeImage(img, _

   91                                   targetWidth, _

   92                                   targetHeight, _

   93                                    0, _

   94                                    0, _

   95                                    img.Width, _

   96                                    img.Height, _

   97                                    imageFormat)

   98     End Function

   99 

  100     Public Shared Function cropImage(ByVal img As Image, _

  101                         ByVal x1 As Integer, _

  102                         ByVal y1 As Integer, _

  103                         ByVal x2 As Integer, _

  104                         ByVal y2 As Integer, _

  105                         ByVal imageFormat As Imaging.ImageFormat _

  106             ) As MemoryStream

  107 

  108         Return cropAndResizeImage(img, _

  109                                   x2 - x1, _

  110                                   y2 - y1, _

  111                                   x1, _

  112                                   y1, _

  113                                   x2, _

  114                                   y2, _

  115                                   imageFormat)

  116     End Function

  117 End Class

kick it on dotnet-kicks.de