Laden...

Graphics.DrawImage Performance

Erstellt von plex88 vor 9 Jahren Letzter Beitrag vor 9 Jahren 2.958 Views
plex88 Themenstarter:in
9 Beiträge seit 2011
vor 9 Jahren
Graphics.DrawImage Performance

Guten Abend,
Ich habe ein kleines Performance Problem und möchte euch mal Fragen wie man die Sache etwas besser anpacken kann oder so. Ich erstelle zuerst ein Weißes Bitmap mit 4k Größe, anschließend werden per Schleife und der Benutzung von Graphics.DrawImage in bestimmten abständen Bilder drauf gelegt. Die gesamte Routine benötigt auf einem E3-1231V3 ca 2sec, eigentlich akzeptabel aber da kommt was zusammen, ich habe mich mal ein bisschen im Netz umgeschaut aber leider keinen besseren ansatz gefunden. Eine reduktion der Bildgröße oder der Qualität müssen wir ausschließen.
Habt ihr eine Idee dazu? Wenn erwünscht kann ich noch ein kleines Sample Posten.
MFG

P
1.090 Beiträge seit 2011
vor 9 Jahren

Wenn du denn Code angibst, ist es auf Fall einfacher Aussagen dazu zu treffen. Ob es da schon Performance Probleme gibt.

Wenn du das Bild nach einiger Zeit änderst, kannst du z.b. das neue Bild in der Zeit schon mal in einem anderen Thread Zeichnen. Aber ohne genau zu wissen was du machen möchtest, ist es auch hier schwer eine gute Antwort zu geben.

Sollte man mal gelesen haben:

Clean Code Developer
Entwurfsmuster
Anti-Pattern

49.485 Beiträge seit 2005
vor 9 Jahren

Hallo plex88,

auch abgesehen vom Code fehlen Informationen. Wie groß ist die Zielbitmap bzw. was meinst du mit 4k? 4000x4000 Pixel? 4KB komprimierte (oder unkomprimierte) Dateigröße?

Wieviele Bilder werden gezeichnet?

Welche Größe haben diese Bilder (minimal, maximal, im Schnitt)?

Werden die Bilder beim Zeichnen skaliert (also z.B. Thumbnails von Bildern in voller Größe)?

herbivore

plex88 Themenstarter:in
9 Beiträge seit 2011
vor 9 Jahren

Danke erstmal für die Antworten,
Das Zielbitmap hat die Größe von 3840x2160,.
Die Bilder werden nicht skaliert und haben so eine Größe zwischen ungefähr 200-800x200-800.
Gezeichnet werden müssen sie ca 10-60 mal je nach Größe.

49.485 Beiträge seit 2005
vor 9 Jahren

Hallo plex88,

bei mir dauert das reine Zeichnen von 60 Bitmaps der Größe 800x800 in eine Bitmap der Größe 3840x2160 auf einem Athlon II x4 640 3GHz ca. 0,4 Sekunden:


using System;
using System.Drawing;
using System.Diagnostics;

static class App
{
   public static void Main ()
   {
      Bitmap target = new Bitmap (3840, 2160);
      Bitmap source = new Bitmap (800, 800);

      Graphics g = Graphics.FromImage (target);

      Stopwatch sw = new Stopwatch ();
      sw.Start ();
      for (int i = 0; i < 60; ++i) {
         g.DrawImage (source, new Rectangle (i*20, i*20, 800, 800), 0, 0, 800, 800, GraphicsUnit.Pixel);
      }
      sw.Stop ();
      Console.WriteLine (sw.Elapsed);
   }
}

herbivore