2017-05-25 36 views
0

我正在開發一個應用程序,我想用圖像中的像素來做事。Xamarin在照片中心選擇一個像素

enter image description here

我拍攝3張照片,並告訴他們這個樣子。當我點擊發件人時;

我的目標是確定這些照片中間像素的顏色代碼。

例如:如果照片中間的像素顏色代碼是#007f00,我想返回一個肯定的響應。 3張照片中的每個中心像素應該相等。

這是我的相片代碼。

private async void btnPhoto1_Clicked(object sender, EventArgs e) 
     { 
      if (!CrossMedia.Current.IsCameraAvailable || !CrossMedia.Current.IsTakePhotoSupported) 
      { 
       DisplayAlert("UYARI", "Cihazınızın kamerası aktif değil!", "OK"); 
       return; 
      } 

      var file = await CrossMedia.Current.TakePhotoAsync(
       new Plugin.Media.Abstractions.StoreCameraMediaOptions 
       { 
        Directory = "MediaPluginPhoto", 
        Name = DateTime.Now + ".jpg", 
        DefaultCamera = Plugin.Media.Abstractions.CameraDevice.Front 
       }); 

      if (file == null) 
       return; 


      img1.Source = ImageSource.FromStream(() => 
      { 
       var stream = file.GetStream(); 
       file.Dispose(); 
       return stream; 
      }); 
     } 

另一方面,可以對照片中的所有像素進行計數。如果顏色代碼#007f00的像素數量超過1000度,我可以得到肯定的答案。

那些誰開發過類似的例子,請幫助。感謝大家。

回答

0

您需要在Android上本地執行此操作,但是如果將圖像轉換爲字節數組,則可以像這樣獲取像素的顏色。

Bitmap bitmap = BitmapFactory.DecodeByteArray(imageBytes, 0, imageBytes.Length); 

Color x = bitmap.GetPixel(width/2, height/2); 

我假設你已經有了圖像的高度和寬度,你只需要除以2即可得到中心。

imageBytes只是將圖像轉換爲字節數組。

要獲得從流imageBytes,你可以這樣做:

var memoryStream = new System.IO.MemoryStream(); 
photo.GetStream().CopyTo(memoryStream); 

var imageBytes = memoryStream.ToArray(); 
+0

我不明白。對於我的代碼; img是一個圖像,我想學習中心像素代碼。當我編輯它; 'Bitmap bitmap = BitmapFactory.DecodeByteArray(img1,0,img1.Length); 顏色x = bitmap.GetPixel(寬度/ 2,高度/ 2);'我把錯誤img1.Length。 –

+0

我很抱歉,但我仍然沒有找到解決方案。我還用github分享了我所有的代碼。我想要的只是點擊分析按鈕,加載圖像中心的像素,按鈕文本來寫。/* GitHub鏈接:https://github.com/sluggish144/Welon/issues/1 */ –

+0

我已更新我的答案,向您展示如何將流轉換爲字節數組。 –

相關問題