【发布时间】:2021-10-15 17:21:33
【问题描述】:
现在正在实施放大和缩小,在拍照之前它不能正常工作,但它不能正常工作?有什么例子吗?当设备识别捏合手势时,我调用该函数。提前谢谢你。
public override bool OnTouchEvent(MotionEvent e)
{
global::Android.Hardware.Camera.Parameters parameters = camera.GetParameters();
maximumZoomLevel = (float)cameraCharacteristics?.Get(CameraCharacteristics.ScalerAvailableMaxDigitalZoom);
Android.Graphics.Rect rect = (Android.Graphics.Rect)cameraCharacteristics?.Get(CameraCharacteristics.SensorInfoActiveArraySize);
if (rect == null) return false;
float currentFingerSpacing;
if (e.PointerCount == 2)
{
currentFingerSpacing = getFingerSpacing(e);
float delta = 0.05f;
if (fingerSpacing != 0)
{
if (currentFingerSpacing > fingerSpacing)
{ //Don't over zoom-in
if ((maximumZoomLevel - zoomLevel) <= delta)
{
delta = maximumZoomLevel - zoomLevel;
}
zoomLevel = zoomLevel + delta;
}
else if (currentFingerSpacing < fingerSpacing)
{ //Don't over zoom-out
if ((zoomLevel - delta) < 1f)
{
delta = zoomLevel - 1f;
}
zoomLevel = zoomLevel - delta;
}
float ratio = (float)1 / zoomLevel;
int croppedWidth = (int)(rect.Width() - Math.Round((float)rect.Width() * ratio));
int croppedHeight = (int)(rect.Height() - Math.Round((float)rect.Height() * ratio));
//Finally, zoom represents the zoomed visible area
zoom = new Android.Graphics.Rect(croppedWidth / 2, croppedHeight / 2,
rect.Width() - croppedWidth / 2, rect.Height() - croppedHeight / 2);
previewRequestBuilder.Set(CaptureRequest.ScalerCropRegion, zoom);
}
fingerSpacing = currentFingerSpacing;
captureSession.SetRepeatingRequest(previewRequestBuilder.Build(), CaptureCallBack, null);
}
return true;
}
【问题讨论】:
-
cameraCharacteristics 返回 null 我不知道它为什么会发生
-
私有静态浮动 getFingerSpacing(MotionEvent e) { float x = e.GetX(0) - e.GetX(1);浮动 y = e.GetY(0) - e.GetY(1);返回 (float)Math.Sqrt(x * x + y * y); } 它总是返回指针索引异常
标签: xamarin.android zooming pinchzoom