2012-06-01 31 views
2

我正在使用WP7相機示例,並在捕獲圖像時遇到問題。現在它使用標準480(W)×800(H)拍攝照片。我想要做的是將照片作爲一個正方形,因爲我的應用需要圖像爲完美的正方形。使用相機捕獲圖像爲完美的正方形?

我將VideoBrush調整爲只顯示480x480,並且原本正在拍攝的圖像似乎拍攝了方形圖片,但是當您在Pictures Hub內部檢查其普通的480x800肖像時。

有誰知道如何設置相機採取一個方形的圖片或可能作出的頂部和底部?

+1

你將不得不使用WritableBitmap –

回答

4

您需要手動將像素複製到新的位圖。 因此,如果相機是水平的,並且想要裁剪圖像的左側部分以使新寬度等於高度,那麼類似這樣的東西就可以工作(我沒有測試此代碼,但即使它不是100%正確的,它應該給你的基本想法):

 WriteableBitmap SquareImage(WriteableBitmap srcBitmap) 
    { 
     int[] srcData = srcBitmap.Pixels; 
     int[] destData = new int[srcBitmap.PixelHeight * srcBitmap.PixelHeight]; 

     for (int row = 0; row < srcBitmap.PixelHeight; ++row) 
     { 
      for (int col = 0; col < srcBitmap.PixelHeight; ++col) 
      { 
       destData[(row * srcBitmap.PixelHeight) + col] = srcData[(row * srcBitmap.PixelWidth) + col]; 
      } 
     } 

     WriteableBitmap squareBitmap = new WriteableBitmap(srcBitmap.PixelHeight, srcBitmap.PixelHeight); 
     destData.CopyTo(squareBitmap.Pixels, 0); 

     return squareBitmap; 
    } 
+1

這是一個很好的起點。事實上,WriteableBitmap是裁剪圖像時要走的路。我所要做的就是將捕獲的JPEG轉換成WriteableBitmap,並在剪切後將其編碼回JPEG流並保存爲ISO。 – loyalpenguin

+0

我發現這個解決方案對我的應用很有用,但是對於一些我得到'ArgumentOutOfRangeException'的圖片,特別是那些'pixelheight'爲640,'pixelWidth'爲480的照片,對於其中'pixelheight'爲600的其他照片和'pixelWidth'是800,爲什麼它工作正常?以及如何避免此異常? – Debhere

+0

您需要使用新寬度和高度最小的尺寸。 int newsize =(srcBitmap.PixelHeight Jon