1
我無法從surfaceView獲取RGB值。我正在與Xamarin,C#合作。 試圖用getBitmap,但這種方法不適合SurfaceView .. 我需要通過觸摸surfaceView一些地方,從相機的實時數據流RGB。 也許我需要使用別的東西而不是surfaceView? '從SurfaceView的相機流中獲取RGB
public class MainActivity : Activity, ISurfaceHolderCallback, Camera.IPreviewCallback, View.IOnTouchListener
{
Camera _camera;
SurfaceView _surfaceview;
int redValue,blueValue,greenValue;
int pixel;
Bitmap bitmap;
TextView _textview;
protected override void OnCreate (Bundle savedInstanceState)
{
base.OnCreate (savedInstanceState);
SetContentView (Resource.Layout.Main);
_surfaceview = (SurfaceView)FindViewById (Resource.Id.surfaceView1);
_surfaceview.SetOnTouchListener (this);
var holder = _surfaceview.Holder;
holder.AddCallback (this);
holder.SetType (Android.Views.SurfaceType.PushBuffers);
TabHost tabhost = FindViewById<TabHost> (Resource.Id.myTab);
tabhost.Setup();
TabHost.TabSpec tabhost1 = tabhost.NewTabSpec ("Tab1");
tabhost1.SetContent (Resource.Id.tab1);
tabhost1.SetIndicator ("CAMERA");
tabhost.AddTab (tabhost1);
TabHost.TabSpec tabhost2 = tabhost.NewTabSpec ("Tab2");
tabhost2.SetContent (Resource.Id.tab2);
tabhost2.SetIndicator ("RGB");
tabhost.AddTab (tabhost2);
_textview = (TextView)FindViewById (Resource.Id.textView1);
}
public bool OnTouch(View v, MotionEvent e)
{
switch (e.Action)
{
case MotionEventActions.Down:
break;
case MotionEventActions.Up:
pixel = bitmap.GetPixel ((int)e.GetX(), (int)e.GetY());
var _color = new Color (pixel);
redValue = _color.R;
blueValue = _color.G;
greenValue = _color.B;
_textview.Text = "Hello";
break;
}
return true;
}
public void SurfaceCreated(ISurfaceHolder holder)
{
try{
_camera = Android.Hardware.Camera.Open();
Android.Hardware.Camera.Parameters p = _camera.GetParameters();
p.PictureFormat = Android.Graphics.ImageFormatType.Jpeg;
_camera.SetParameters(p);
_camera.SetPreviewCallback(this);
_camera.Lock();
_camera.SetDisplayOrientation(90);
_camera.SetPreviewDisplay(holder);
_camera.StartPreview();
}
catch(System.IO.IOException e){
}
}
public void SurfaceDestroyed(ISurfaceHolder holder){
_camera.Unlock();
_camera.StopPreview();
_camera.Release();
}
public void SurfaceChanged(ISurfaceHolder holder,Android.Graphics.Format f,int i, int j)
{
}
void Camera.IPreviewCallback.OnPreviewFrame(byte[] b, Android.Hardware.Camera c)
{
}
}}
`
你有你的形象在字節[] B,這裏有什麼問題?使注意圖像大部分被旋轉,默認情況下獲取風景圖像。 –
如果你知道如何,我們可以用俄語談論) 我有一個實時相機預覽。我需要輕按surfaceview,然後在OnTouch的動作監聽獲得的抽頭像素和RGB代碼 –
檢查我的回答以下) –