Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Re: Bild zuschneiden

11 views
Skip to first unread message

Herfried K. Wagner [MVP]

unread,
Mar 22, 2006, 9:37:54 AM3/22/06
to
Hallo Christian!

"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/>

Christian Engelhardt

unread,
Mar 22, 2006, 10:09:34 AM3/22/06
to
Hallo Herfried,

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 ?

Stefan Simon

unread,
Mar 22, 2006, 11:12:12 AM3/22/06
to
> ich check das nicht. Hier wie ich es probiert habe:

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


Karsten Sosna

unread,
Mar 23, 2006, 12:41:43 AM3/23/06
to
> danke für den Tipp. Habs gesehen. Trotzdem mag ich jetzt nimmer. Das
> entbehrt für mich jeglicher Logik. Jetzt hab ich es geschafft, genau den
> Bereich aus dem Ursprungsimage herauszuschneiden und in ein anderes mit
> DrawImage reinzukopieren und was passiert jetzt ? Plötzlich ist der
> ausgeschnittene Bereich nur noch halb so hoch. Ich hab ne höhe von 320
> ausgeschnitten und im ausgegebenen ist er nur noch 160 Hoch. Aber die
> Grafik
> ist komplett da. Nur halt halb so hoch. Super.

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


Christian Engelhardt

unread,
Mar 23, 2006, 5:46:23 AM3/23/06
to
Hallo Karsten,

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.

dejee...@gmail.com

unread,
Aug 16, 2012, 7:30:38 PM8/16/12
to
0 new messages