0

我正在開發一個WinRT應用程序,它應該需要一些圖像處理。 我使用WriteableBitmapex,我嘗試改變我的圖像中橢圓上特定像素的顏色。 但我的解決方案非常慢。大約幾分鐘後點擊圖像。 爲什麼這個解決方案如此之慢?另一種方法是什麼?如何在WinRT應用程序中進行快速圖像處理?

private void myimage_Tapped(object sender, TappedRoutedEventArgs e) 
{ 
    var xcor = e.GetPosition(sender as UIElement).X; 
    var ycor = e.GetPosition(sender as UIElement).Y; 
    Image ws = sender as Image; 

    int x = (int)(imag.PixelWidth * xcor/ws.ActualWidth); 
    int y = (int)(imag.PixelHeight * ycor/ws.ActualHeight); 
    var color = imag.GetPixel(x, y); 
    if (color.B != 0 && color.G != 0 && color.R != 0) 
    { 
     while (color.B != 0 && color.G != 0 && color.R != 0 && x < imag.PixelWidth) 
     { 
      x = x+1; 
      y = (int)(imag.PixelHeight * ycor/ws.ActualHeight); 
      while (color.B != 0 && color.G != 0 && color.R != 0 && y < imag.PixelHeight) 
      { 
       y = y + 1; 
       color = imag.GetPixel(x, y); 
       imag.SetPixel(x, y, Colors.Red); 
      } 

     } 
    } 
} 
+0

什麼座標你XCOR存儲,YCOR? 那個橢圓是什麼? 當一個像素是黑色時,爲什麼你會停下腳步? – Piglet

+0

@Piglet我需要改變橢圓的筆觸顏色爲黑色和xcor的顏色確保點擊橢圓 –

回答

2
  1. 使用BitmapContext,因爲Set/GetPixel非常非常慢,其實每次給他們打電話時,他們打開/關閉BitmapContext

  2. 評論你的邏輯,因爲但說實話,沒有任何對我有意義或解釋你想達到的目標

下面是關於如何使用上下文沿着幾個助手的例子:

var bitmap = BitmapFactory.New(2048, 2048); 
using (var context = bitmap.GetBitmapContext(ReadWriteMode.ReadWrite)) 
{ 
    Func<int, int, int> getPixel = (x, y) => 
    { 
     var offset = y*bitmap.PixelWidth + x; 
     return offset; 
    }; 

    Action<int, int, int> setPixel = (x, y, c) => 
    { 
     var offset = getPixel(x, y); 
     context.Pixels[offset] = c; 
    }; 

    Func<Color, int> toInt32 = c => 
    { 
     var i = c.A << 24 | c.R << 16 | c.G << 8 | c.B; 
     return i; 
    }; 
    for (var y = 0; y < bitmap.PixelHeight; y++) 
    { 
     for (var x = 0; x < bitmap.PixelHeight; x++) 
     { 
      var color = Color.FromArgb(
       255, 
       (byte) ((float) x/bitmap.PixelWidth*255), 
       (byte) ((float) y/bitmap.PixelHeight*255), 
       255); 
      var int32 = toInt32(color); 
      setPixel(x, y, int32); 
     } 
    } 
} 
+0

與Microsoft Paint中使用的相同步驟?我嘗試在ms繪畫應用程序中創建像橡皮擦一樣的工具並填充顏色。但我需要弄清楚使用這種方法或使用圖形對象的更好方法是什麼?在這種方法中,我能夠創建填充工具,但用於圖形方法的橡皮擦。如何以更快的方式使用此工具進行圖像處理? –

相關問題