Entwickler-Ecke

Multimedia / Grafik - DrawImage Teil eines Bildes kopieren


omvo02 - So 02.11.08 02:30
Titel: DrawImage Teil eines Bildes kopieren
Hallo,

wie kopiert man mit DrawImage einen Teil eines Bitmaps in ein anderes Bitmap?
Das andere Bitmap soll dann nur diesen Ausschnitt (Teil) enthalten.


C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
Bitmap CopyPart(Bitmap Quelle, Rectangle Teil)
{
Bitmap Ziel = new Bitmap(Teil.Width, Teil.Height);
Graphics g = Graphics.FromImage(Quelle);

g.DrawImage(Quelle, ?);
...
}


Vielen Dank!

omvo02

Moderiert von user profile iconKha: C#-Tags hinzugefügt


Kha - So 02.11.08 11:31

Versuch es einmal mit diesem Overload:
Zitat:

C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
public void DrawImage(
    Image image,
    int x,
    int y,
    Rectangle srcRect,
    GraphicsUnit srcUnit
)


Parameter

image
Typ: System.Drawing..::.Image

Das zu zeichnende Image.

x
Typ: System..::.Int32

Die x-Koordinate der oberen linken Ecke des gezeichneten Bilds.

y
Typ: System..::.Int32

Die y-Koordinate der oberen linken Ecke des gezeichneten Bilds.

srcRect
Typ: System.Drawing..::.Rectangle

Rectangle-Struktur, die den zu zeichnenden Teil des image-Objekts angibt.

srcUnit
Typ: System.Drawing..::.GraphicsUnit

Member der GraphicsUnit-Enumeration, der die Maßeinheiten für den srcRect-Parameter angibt.

Also erst die Zielkoordinaten, dann das Quellrechteck.


omvo02 - So 02.11.08 15:52

danke für deine Antwort, Kha.

Gibt es irgendeine Möglichkeit die GraphicsUnit.Pixel-Angabe, die bei diesem Aufruf erforderlich ist, zu umgehen? Gibt es eine Möglichkeit eine eigene GraphicsUnit zu erstellen, die der Pixelgröße meines *.jpg entspricht?
Sobald ich DrawImage so benutze, dass ich GraphicsUnit angeben muss, bekomme ich nicht den ganzen Ausschnitt (dies habe ich in meinem Post "Bildverkleinern Originalkoordinaten" [http://www.c-sharp-forum.de/topic_Bildverkleinern+Originalkoordinaten_87384.html] beschrieben)?

Danke auch, dass du dir die Mühe gemacht hast, den Quellcode in meinem Post in einen Code-Block zu setzen, hatte leider ich vergessen.


omvo02 - So 02.11.08 16:12

Also ich bin inzwischen bei diesem Problem etwas weiter gekommen.
Man muss die Auflösung des Quell-Bitmaps auf die Auflösung des Graphics-Objektes setzen:

C#-Quelltext
1:
Quelle.SetResolution(g.DpiX, g.DpiY);