"Christian Engelhardt" <Christian...@discussions.microsoft.com>
schrieb:
> mit der Methode aus einem Image Objet Getthumbnailimage kann ich mir ein
> Bild in jeder beliebigen Größe skalieren.
> Wie geht es denn, dass ich von einem Bild, nehmen wir an 150 Hoch x 650
> Breit, nur einen Teil anzeigen lasse, also bsp. von diesem Bild 150 x 320
> herausschneide ?
Schau dir die Überladungen von 'Graphics.DrawImage' an!
--
M S Herfried K. Wagner
M V P <URL:http://dotnet.mvps.org/>
V B <URL:http://classicvb.org/petition/>
ich check das nicht. Hier wie ich es probiert habe:
'Ausgangsbild mit 150 Hoch x 650 breit
oVorschau = oImage.FromStream(oStream)
'Dann streng nach Beipspiel möchte ich in der oberen Linken Ecke
beginnend aus dem Bild den Bereich von 150 x 320 Pixeln ausschneiden
'Koordinaten für die obere linke Ecke meines Bildes
Dim x As Single = 0.0F
Dim y As Single = 0.0F
'Rechteck das den Ausschneidebereich angibt
Dim srcRect As New RectangleF(0.0F, 0.0F, 320.0F, 150.0F)
Dim units As GraphicsUnit = GraphicsUnit.Pixel
' Graphics Objekt erstellen von meinen großen Bild und rechtech auschneiden
oGraphics = System.Drawing.Graphics.FromImage(oVorschau)
oGraphics.DrawImage(oVorschau, x, y, srcRect, units)
Return oVorschau
Das Bild kommt unverändert zurück. Was vergessen ?
Dein Code ist soweit ricjtig, dein Problem ist was anderes. Du hast eine
Quelle (oVorschau), kopierst den Bereich von 0,0,320,150 (x, y, w, h) an die
gleiche Stelle wo du es herholst. Dein Code tut genau das, was du willst,
ist optisch nichts davon zu sehen.
Erstelle oGraphics mal nicht von oVorschau sonder von einer 2. Picturebox,
dann siehst du, was ich meine.
Stefan
Christian,
die Logik ist hier wirklich gerade:
\\\
Private Sub Form1_Paint(ByVal sender As Object, ByVal e As
System.Windows.Forms.PaintEventArgs) Handles Me.Paint
'Erstellt die Quelle
Dim BM_Src As New Bitmap("C:\Temp\Testbild-ATV.jpg") '1600x1200 Pixel
'Quellgrafik auf dem Formular ausgeben.
e.Graphics.DrawImage(BM_Src, 0, 0)
'Größe des Quellausschnitts
Dim srcRect As New Rectangle(0, 0, 100, 100)
'Größe des Ziels
Dim dstRect As New Rectangle(0, 0, 200, 200)
'Erstellt das Zielobject
Dim BM_Dst As New Bitmap(dstRect.Width, dstRect.Height)
'Graphics-Objekt vom Ziel, den dort soll gezeichnet werden.
Dim G_Dst As Graphics = Graphics.FromImage(BM_Dst)
'Ausschnitt auf dem Ziel ausgeben.
G_Dst.DrawImage(BM_Src, dstRect, srcRect, GraphicsUnit.Pixel)
'Zielgrafik auf dem Formular ausgeben.
e.Graphics.DrawImage(BM_Dst, 0, 0)
'Objekte zerstören.
G_Dst.Dispose()
BM_Dst.Dispose()
BM_Src.Dispose()
End Sub
///
Wie Du siehst habe ich ein Quellrechteck(100x100) und ein
Zielrechteck(200x200). D.h. ich will die Quelle doppelt so groß ausgeben.
Wenn die Quelle und das Ziel gleich groß sind findet auch keine Verzerrung
statt.
--
Gruß Scotty
vielen vielen Dank. Jetzt gehts einwandfrei. Diese Zeile hat mir gefehlt. Da
hätte ich mir die Überladungen von Bitmap mal genauer ansehen sollen.
Dim BM_Dst As New Bitmap(dstRect.Width, dstRect.Height)
Jetzt wird wirklich ausgeschnitten und nicht skaliert. Super.
Ich hatte den Fehler gemacht, dass mein Zielbild schon skaliert war.