2017-08-30 120 views
0

我正在使用C#控制檯應用程序項目生成光柵幀,然後使用 ffmpeg工具從這些幀生成視頻。我正在使用一個圖形對象g來繪製一個bmp對象並將其保存到 生成 的幀(s)[保存速率是每秒25幀]。我在圖形對象上執行了繪圖[寫入],擦除 「在白色背景上」,很好地清除了圖形對象, 完美地取消了繪製的形狀。 4)我嘗試設置背景和 導入圖像,並且工作得非常好,你可以在 圖形對象上寫[是否白紙,背景圖像,進口 圖像...等]C#,防止擦除重疊背景圖像部分的筆畫

的問題,當我試圖擦除具有背景的圖像部分[背景圖像,例如線條,圖形,座標..等]。該圖形對象將擦除擦除筆劃[白色 重疊]的圖像部分 。當然這[用於擦除筆畫的白色]正在工作 罰款與白色頁面背景。

我有種想大聲,邏輯上的它非常有意義的是,白色的行程橡皮擦將在非白色

背景標記[所以看起來橡皮擦擦除背景。

是否存在(a)方式,機制,覆蓋算法,着色機制:)使得在擦除筆劃'點下的背景圖像部分不變形。例如: 1)將背景圖像放置在第一層 2)在頂層執行繪圖 3)當[在頂層上]擦除時,使用透明顏色或筆觸機制來顯示背景圖像「部分」之前與背景重疊......這可能嗎?

感謝您的幫助和提前輸入。 請注意,您可能沒有完美的解決方案。但你的想法很感激。

回答

0

分辨率: 掩蔽原始圖像(用我所有的形狀的圖紙源圖像),並繪製它在不同的目的地BMP:

 public static Image CropToPath(Image srcImage, List<Point> Points, Pen p, Bitmap bmp) 
    { 


     Bitmap mask = bmp;//new Bitmap(Bitmap.FromFile((new DirectoryInfo(outPutPath)).GetFiles()?.OrderByDescending(f => f.CreationTimeUtc).First()?.FullName)); 

     DrawPoints(Graphics.FromImage(mask), p, Points); 


     using (var imgattr = new ImageAttributes()) 
     { 
      // set color key to Line 
      imgattr.SetColorKey(Color.Gainsboro, Color.Gainsboro); 

      // Draw non-line portions of mask onto original 
      using (var g3 = Graphics.FromImage(srcImage)) 
      { 
       SmoothGraphic(g3).DrawImage(
        mask, 
        new Rectangle(0, 0, srcImage.Width, srcImage.Height), 
        0, 0, srcImage.Width, srcImage.Height, 
        GraphicsUnit.Pixel, imgattr 
       ); 

       return srcImage; 
      } 



     } 


    }