2016-07-25 41 views
-2

Ich erstelle Heatmap abhängig von den Blickflächen eines gegebenen Bildes. Ich kann die Heatmap erstellen und sie als neue Datei auf meinem Desktop speichern. Aber ich möchte ein anderes Bild erstellen, das aus der Heatmap und dem Bild besteht, auf dem die Eye-Tracking-Daten gesammelt wurden. Ich möchte, dass das Originalbild der durchgehende Hintergrund ist, und überlappe dann (oder Overlay, das ich nicht kenne) die Heatmap als transparent und füge sie in eine neue Datei zusammen. Gibt es eine Möglichkeit, es in C# zu tun? DankeÜberlappung eines Bildes als transparent auf einem anderen in C#

+0

Ja, es gibt einen Weg. Haben Sie versucht, es zu googeln? :) – Pikoh

+0

Natürlich versuchte ich – Danabey

+1

Versuchen Sie folgende Antwort http://StackOverflow.com/A/6842854/6170142 Dies wird verwendet, um zwei Bilder zu einem zusammenführen und die resultierende Datei speichern. –

Antwort

0

Ok ich eine Antwort gefunden,

erste ich mein Hintergrundbild skalieren

public static Bitmap ResizeImage(Bitmap image, int width, int height) 
    { 
     var destRect = new Rectangle(0, 0, width, height); 
     var destImage = new Bitmap(width, height); 

     destImage.SetResolution(image.HorizontalResolution, image.VerticalResolution); 

     using (var graphics = Graphics.FromImage(destImage)) 
     { 
      graphics.CompositingMode = CompositingMode.SourceCopy; 
      graphics.CompositingQuality = CompositingQuality.HighQuality; 
      graphics.InterpolationMode = InterpolationMode.HighQualityBicubic; 
      graphics.SmoothingMode = SmoothingMode.HighQuality; 
      graphics.PixelOffsetMode = PixelOffsetMode.HighQuality; 

      using (var wrapMode = new ImageAttributes()) 
      { 
       wrapMode.SetWrapMode(WrapMode.TileFlipXY); 
       graphics.DrawImage(image, destRect, 0, 0, image.Width, image.Height, GraphicsUnit.Pixel, wrapMode); 
      } 
     } 
     return destImage; 
    } 

nach, dass der Heatmap auf einem anderen Opazitätsniveau eingestellt werden muss, um Hintergrund sichtbar

zu machen
public static Image SetImageOpacity(Image image, float opacity) 
    { 
     try 
     { 
      //create a Bitmap the size of the image provided 
      Bitmap bmp = new Bitmap(image.Width, image.Height); 

      //create a graphics object from the image 
      using (Graphics gfx = Graphics.FromImage(bmp)) 
      { 

       //create a color matrix object 
       ColorMatrix matrix = new ColorMatrix(); 

       //set the opacity 
       matrix.Matrix33 = opacity; 

       //create image attributes 
       ImageAttributes attributes = new ImageAttributes(); 

       //set the color(opacity) of the image 
       attributes.SetColorMatrix(matrix, ColorMatrixFlag.Default, ColorAdjustType.Bitmap); 

       //now draw the image 
       gfx.DrawImage(image, new Rectangle(0, 0, bmp.Width, bmp.Height), 0, 0, image.Width, image.Height, GraphicsUnit.Pixel, attributes); 
      } 
      return bmp; 
     } 
     catch (Exception ex) 
     { 
      //MessageBox.Show(ex.Message); 
      throw ex; 
      //return null; 
     } 
    } 

schließlich müssen wir diese beiden

fusionieren 210
 public static Image Overlap(Image source1, Image source2) 
    { 
     var target = new Bitmap(source1.Width, source1.Height, PixelFormat.Format32bppArgb); 
     var graphics = Graphics.FromImage(target); 
     graphics.CompositingMode = CompositingMode.SourceOver; // this is the default, but just to be clear 

     graphics.DrawImage(source1, 0, 0); 
     graphics.DrawImage(source2, 0, 0); 

     return target; 
    } 

hier ist mein Hintergrund, der mächtige Erdogan (parallel Töter, coup Zerstörer, der König von çomars, und der Protektor des Kalifats) original RTE

und hier ist die fusionierte Version, mit der Heatmap von Die Eyetracking-Daten RTE + heatmap