Copia Piccole Bitmap a Grande bitmap con trasparenza Miscela: Che cosa è più veloce di Graphics.DrawImage (smallBitmap, x, y)?

StackOverflow https://stackoverflow.com/questions/2475233

Domanda

ho identificato questa chiamata come un collo di bottiglia in funzione ad alta pressione.

graphics.DrawImage(smallBitmap, x , y);

C'è un modo più veloce per fondere piccole bitmap semi trasparenti in una più grande semi trasparente?

Esempio di utilizzo:

XY[] locations = GetLocs();
     Bitmap[] bitmaps = GetBmps(); //small images sizes vary approx 30px x 30px

        using (Bitmap large = new Bitmap(500, 500, PixelFormat.Format32bppPArgb))
        using (Graphics largeGraphics = Graphics.FromImage(large))
        {
          for(var i=0; i < largeNumber; i++)
          {
            //this is the bottleneck
            largeGraphics.DrawImage(bitmaps[i], locations[i].x , locations[i].y); 
         }
       }

       var done = new MemoryStream(); 
       large.Save(done, ImageFormat.Png); 
       done.Position = 0;
       return (done);

Le chiamate DrawImage prendere una piccola bitmap 32bppPArgb e li copia in un bitmap grande in posizioni che variano e le piccole bitmap potrebbero solo parzialmente sovrapporsi all'area visibile bitmap più grandi. Entrambe le immagini hanno contenuti semitrasparenti che vengono miscelati da DrawImage in un modo che è importante per l'uscita. Ho fatto alcuni test con BitBlt ma non si vede un miglioramento significativo della velocità e l'alpha blending non è venuto fuori lo stesso nel mio test. Sono aperto a quasi qualsiasi metodo tra cui una chiamata migliore per bitblt o non sicuri codice C #.

È stato utile?

Soluzione

Dopo alcuni test vedo che Dan aveva ragione (vedi commenti qui sopra). E 'possibile battere GDI trarre un rendimento Immagine se non avete bisogno di tutte le caratteristiche di fusione che offre, ma nel caso della trasparenza si fonde Non credo che ci sia spazio per migliorare il materiale.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top