Мне удалось отобразить поток камеры в TextureView и сделать Bitmap для чтения пикселей в каждом кадре потока. Затем я могу применить алгоритм отслеживания, чтобы следовать примеру мяча. Но теперь я хотел бы отобразить красную метку (например), которая показывает положение найденного шара. Как я могу это сделать?Как нарисовать метку на потоке камеры с помощью Xamarin.Android?
0
A
ответ
1
Я считаю, что существует много способов нарисовать метку на экране камеры. Здесь я использовал SurfaceView
. Основная идея - установить SurfaceView
в верхней части Textureview
с прозрачным фоном.
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
<TextureView android:id="@+id/textureView"
android:layout_height="match_parent"
android:layout_width="match_parent" />
<SurfaceView
android:id="@+id/surfaceview"
android:layout_height="match_parent"
android:layout_width="match_parent" />
</RelativeLayout >
код позади:
public class MainActivity : Activity, TextureView.ISurfaceTextureListener
{
private Android.Hardware.Camera _camera;
private TextureView _textureView;
private SurfaceView _surfaceView;
private ISurfaceHolder holder;
protected override void OnCreate(Bundle bundle)
{
base.OnCreate(bundle);
// Set our view from the "main" layout resource
SetContentView(Resource.Layout.Main);
_textureView = (TextureView)FindViewById(Resource.Id.textureView);
_textureView.SurfaceTextureListener = this;
_surfaceView = (SurfaceView)FindViewById(Resource.Id.surfaceview);
//set to top layer
_surfaceView.SetZOrderOnTop(true);
//set the background to transparent
_surfaceView.Holder.SetFormat(Format.Transparent);
holder = _surfaceView.Holder;
_surfaceView.Touch += _surfaceView_Touch;
}
private void _surfaceView_Touch(object sender, View.TouchEventArgs e)
{
//define the paintbrush
Paint mpaint = new Paint();
mpaint.Color = Color.Red;
mpaint.SetStyle(Paint.Style.Stroke);
mpaint.StrokeWidth = 2f;
//draw
Canvas canvas = holder.LockCanvas();
//clear the paint of last time
canvas.DrawColor(Color.Transparent, PorterDuff.Mode.Clear);
//draw a new one, set your ball's position to the rect here
var x = e.Event.GetX();
var y = e.Event.GetY();
Rect r = new Rect((int)x, (int)y, (int)x + 100, (int)y + 100);
canvas.DrawRect(r, mpaint);
holder.UnlockCanvasAndPost(canvas);
}
public bool OnSurfaceTextureDestroyed(SurfaceTexture surface)
{
_camera.StopPreview();
_camera.Release();
return true;
}
public void OnSurfaceTextureAvailable(SurfaceTexture surface, int width, int height)
{
_camera = Android.Hardware.Camera.Open();
try
{
_camera.SetPreviewTexture(surface);
_camera.SetDisplayOrientation(90);
_camera.StartPreview();
}
catch (Java.IO.IOException ex)
{
Console.WriteLine(ex.Message);
}
}
public void OnSurfaceTextureSizeChanged(SurfaceTexture surface, int width, int height)
{
}
public void OnSurfaceTextureUpdated(SurfaceTexture surface)
{
}
}
Поскольку у меня нет алгоритма отслеживания, чтобы следовать мячу, я использовал Touch
событие SurfaceView
, каждый раз, когда вы повернутые на SurfaceView
, прямоугольник с красным штрихом будет нарисован на постученной позиции. Вы можете изменить код в моем методе _surfaceView_Touch
на ваш алгоритм отслеживания и нарисовать красную метку.
Смежные вопросы
- 1. нарисовать метку «X» на изображении в asp.net с помощью C#
- 2. Как нарисовать метку на петле в tikz
- 3. Как нарисовать эллипс для imageButton xamarin.android?
- 4. Как нарисовать на холсте в другом потоке?
- 5. Как нарисовать линию, соединяющую метку с ее позицией на OpenLayers3
- 6. Как нарисовать предварительный просмотр камеры
- 7. Как записывать видео с фронтальной камеры в Xamarin.Android?
- 8. странная проблема нарисовать метку на UITableViewCell
- 9. Освобождение камеры в потоке
- 10. Как нарисовать линию на экране камеры с j2me?
- 11. нарисовать на вид камеры в реальном времени
- 12. Как нарисовать с помощью крана на холсте?
- 13. Как нарисовать сверху на макете при вызове камеры
- 14. Как нарисовать незаполненную коробку на видеопотоке с помощью мыши
- 15. Предварительный просмотр камеры с камеры камеры
- 16. Нарисовать точки на холсте с помощью смещения?
- 17. Xamarin.Android Как создать галерею с прорисовкой изображений с помощью ViewPager?
- 18. нарисовать полигон на карте с помощью пальца
- 19. байт [], чтобы изображение с помощью Xamarin.Android
- 20. Xcode - Как нарисовать вид с помощью потока?
- 21. Пропустить массив на метку с помощью Segue
- 22. Нарисовать на cmd с помощью C++
- 23. StringContent пусто на Xamarin.Android
- 24. Android Launcher получить значок и метку камеры
- 25. Как нарисовать значение на барах на гистограмме с помощью Pandas?
- 26. Найти конкретную метку времени в бесконечном потоке
- 27. камеры изображение вращают с помощью камеры Intent
- 28. Отображение изображения, снятого с помощью камеры внутри тега изображения html, размещенного в WebView - Xamarin.Android
- 29. DrawableLeft программно на Xamarin.Android?
- 30. Xamarin.Android с использованием метода async на фоновом потоке вызывает вспышку экрана
Он отлично работает! Благодаря ! –