我的应用程序中有一个摄像头,我希望它能够以与手机摄像头相同的方式连续自动对焦.我发现模式FOCUS_MODE_CONTINUOUS_VIDEO
和FOCUS_MODE_CONTINUOUS_PICTURE
,但他们不会被一些HTC手机姜饼我测试上的支持.
我正在做的是确定是否可以使用这些模式:
Camera.Parameters parameters = mCamera.getParameters();
List<String> supportedFocusModes = parameters.getSupportedFocusModes();
if (android.os.Build.VERSION.SDK_INT >= Build.VERSION_CODES.ICE_CREAM_SANDWICH &&
supportedFocusModes.contains(Camera.Parameters.FOCUS_MODE_CONTINUOUS_PICTURE)) {
parameters.setFocusMode(Camera.Parameters.FOCUS_MODE_CONTINUOUS_PICTURE);
}
else if (supportedFocusModes.contains(Camera.Parameters.FOCUS_MODE_CONTINUOUS_VIDEO)) {
parameters.setFocusMode(Camera.Parameters.FOCUS_MODE_CONTINUOUS_VIDEO);
}
else if (supportedFocusModes.contains(Camera.Parameters.FOCUS_MODE_AUTO)) {
// auto focus on request only
parameters.setFocusMode(Camera.Parameters.FOCUS_MODE_AUTO);
}
Run Code Online (Sandbox Code Playgroud)
在几种不同的姜饼HTC手机上运行我没有得到连续模式,但我得到"自动".这让我可以根据需要自动对焦(当我打电话时mCamera.autoFocus(null)
,如果用户移动相机,相机将不会重新聚焦.
我无法将对焦模式设置为相机不支持的任何内容,如果我这样做,则会显示空白.
我试过的一个解决方案是调用mCamera.autoFocus(null)
计时器.这会使相机连续重新对焦,即使它已经对焦.
有没有办法在这些手机上实现持续的自动对焦体验?当我在这些手机上查看HTC相机应用时,它确实具有连续自动对焦 - 当您在相机周围移动时重新聚焦并且在图像聚焦后不会保持重新对焦.
当我环绕我input
的时候ng-if
,隐藏并显示autofocus
属性后没有生效:
这是代码:
<!DOCTYPE html>
<html ng-app>
<head>
<script data-require="angularjs@1.5.0" data-semver="1.5.0" src="https://cdnjs.cloudflare.com/ajax/libs/angular.js/1.5.0/angular.js"></script>
<link rel="stylesheet" href="style.css" />
<script src="script.js"></script>
</head>
<body ng-init="view={}; view.show = true">
<button ng-click="view.show = !view.show">{{view.show ? "hide" : "show"}}</button>
<div ng-if="view.show">
<input autofocus />
</div>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)
以下是plunker:http://plnkr.co/edit/k7tb3xw5AsBYrhdlr3bA?p=preview
只需单击隐藏,然后在显示后,您将看到自动对焦不起作用!
在Chrome中只在第一个节目上工作,在FF和IE中它根本不起作用!
实际上,这更像是一个错误描述而不是一个问题.
我在一个非常简单的登录页面上注意到Firefox中无格式内容(FOUC)的闪现.没有使用图像.没有沉重的CSS.所有Javascript都放在代码的末尾,就在关闭正文标记之前.但是当页面加载时,Firefox显示一个完全没有样式的页面大约100毫秒,然后css生效.这种情况每次都会发生,毫无例外.
我发现有一些黑客可以解决这个问题:只需添加一个<script>
元素<head>
,将你喜欢的任何javascript代码放入其中,甚至是简单的评论和 - bam!- 问题解决了.像这样:
<script>/* foo */</script>
Run Code Online (Sandbox Code Playgroud)
FOUC的实际原因似乎是将autofocus属性与其中一个表单字段一起使用.因此,删除"自动对焦"也可以解决问题.
这不是很奇怪吗?
有人知道比我更好的解决方案吗?
我正在使用有角度的路线.每个页面(路由)都有一个输入字段.我已经在第一页上成功使用了属性autofocus.当我导航到其他页面时,输入不会自动对焦.返回第一页不会再次自动对焦输入.我现在明白为什么它不起作用,但想知道是否有办法实现这一目标.
我是Angular的新手,我不确定我理解我读到的关于ngFocus的内容:
我们有一个<!DOCTYPE html>
带有Twitter Bootstrap 的HTML5应用程序()和各种其他JavaScript库(包括jQuery) - 所有这些都运行在他们当前的版本上.
该页面包含具有autofocus
属性集的文本输入.
<input type="text" autofocus="autofocus" />
该页面包含多个"屏幕"内容,这意味着页面上始终会有一个垂直滚动条.文本输入位于页面的第一个"折叠"内,约.从页面顶部250px.
在Chrome,Safari和Opera上,该页面按预期工作.页面加载时,元素在屏幕上并聚焦.
在FireFox(当前版本 - 18.0.1)上,元素具有焦点,但页面已滚动到1533px(通过window.pageYOffset确定).具有不同内容长度的相同页面将始终滚动到相同位置,并且该元素将在屏幕外呈现.
绝对只有一个元素具有autofocus属性set($("[autofocus]").length
).
从元素中删除自动聚焦属性不会导致页面完全滚动(即页面保持滚动到顶部 - 如预期的那样).
有人可以提供任何帮助或见解吗?
以下测试正常:
<!DOCTYPE html>
<html>
<head> </head>
<body>
<div style="height: 200px">
<h1>Test</h1>
</div>
<div style="height: 2000px">
test
<br />
<input autofocus type="text" />
</div>
</body>
</html>
Run Code Online (Sandbox Code Playgroud) 我使用ng-repeat来获取多个电话号码
<div ng-repeat="phone in phones">
<input ng-model="phone" type="text" autofocus="autofocus">
</div>
<a ng-click="addPhone()">Add Phone</a>
Run Code Online (Sandbox Code Playgroud)
在控制器中
$scope.addPhone = function() {
$scope.phones.add('');
}
Run Code Online (Sandbox Code Playgroud)
每当我添加新手机时,它会自动对输入进行自动对焦.它很棒.但是当我重新加载(从链接打开)视图时,它会滚动到最后一个条目.如何在第一次加载视图时避免自动对焦.我添加新手机时只想自动对焦.
我有一个输入视图 <ion-input #codigobarras></ion-input>
如何自动关注此输入?
@ViewChild('codigobarras') input_codigobarras: Input;
...
ionViewDidEnter() {
this.input_codigobarras.focus(); // didn't work = temp2.focus is not a function
this.input_codigobarras.focus.emit(); // didn't work = do nothing, just returns undefined
this.input_codigobarras.getElementRef().nativeElement.focus() // didn't work = do nothing, just returns undefined
this.input_codigobarras.setFocus(); // didn't work = do nothing, just returns undefined
}
Run Code Online (Sandbox Code Playgroud)
<ion-input [autofocus]></ion-input> <!-- Didn't work -->
Run Code Online (Sandbox Code Playgroud) 我正在使用Android camera2 API.
我可以在手动对焦模式下使用LENS_FOCUS_DISTANCE获得焦距值.但是,AF模式下的属性始终为零.在AF模式下有没有办法获得焦距?
我正在使用位于此处的Windows Universal Sample for OCR:
https://github.com/Microsoft/Windows-universal-samples/tree/master/Samples/OCR/cs
特别是OcrCapturedImage.xaml.cs
看起来相机经常变得没有焦点,模糊,并且远远不如原生相机应用程序那么好.如何设置自动对焦和/或点按以修复曝光?
我到目前为止所看到的是查看其他有助于设置分辨率的相机样本,但我找不到有关焦点/曝光的任何信息.
更新:
我认为
await mediaCapture.VideoDeviceController.FocusControl.FocusAsync();
Run Code Online (Sandbox Code Playgroud)
和
await mediaCapture.VideoDeviceController.ExposureControl.SetAutoAsync(true);
Run Code Online (Sandbox Code Playgroud)
但是,如果有人知道如何挖掘某个区域并相应地应用焦点/曝光,那么这不起作用(不做任何事情 - 仍然模糊等)并且可以建立起来.
原生相机:
应用相机:
根据答案更新:
我一定是把我的焦点方法放在错误的位置,因为我的原始更新代码有效.Sergi也有效.我想将tapped事件与它结合使用,如下所示:
Point tapped=e.GetPosition(null); //Where e is TappedRoutedEventArgs from a tapped event method on my preview screen
await mediaCapture.VideoDeviceController.RegionsOfInterestControl.ClearRegionsAsync();
await mediaCapture.VideoDeviceController.RegionsOfInterestControl.SetRegionsAsync(new[] { new RegionOfInterest() { Bounds = new Rect(tapped.X, tapped.Y, 0.02, 0.02) } }); //Throws Parameter Incorrect
Run Code Online (Sandbox Code Playgroud)
但它抛出参数不正确.另外,如何在预览屏幕上显示矩形的矩形,以便用户知道感兴趣的区域有多大?
我正在使用AVFoundation识别文本并执行OCR.如何添加自动对焦?当用户点击屏幕时,我不想要黄色方块的东西,我只是想让它自动聚焦在对象上,例如信用卡.
这是我的会话代码.
func setupSession() {
session = AVCaptureSession()
session.sessionPreset = AVCaptureSessionPresetHigh
let camera = AVCaptureDevice
.defaultDeviceWithMediaType(AVMediaTypeVideo)
do { input = try AVCaptureDeviceInput(device: camera) } catch { return }
output = AVCaptureStillImageOutput()
output.outputSettings = [ AVVideoCodecKey: AVVideoCodecJPEG ]
guard session.canAddInput(input)
&& session.canAddOutput(output) else { return }
session.addInput(input)
session.addOutput(output)
previewLayer = AVCaptureVideoPreviewLayer(session: session)
previewLayer!.videoGravity = AVLayerVideoGravityResizeAspect
previewLayer!.connection?.videoOrientation = .Portrait
view.layer.addSublayer(previewLayer!)
session.startRunning()
}
Run Code Online (Sandbox Code Playgroud)