我需要知道图库中图像的方向(由相机拍摄).我最初的方法是使用适用于我的Droid 1的MediaStore.Images.Media.ORIENTATION.在HTC Thunderbolt上测试时,手机只能将0保存到该字段.
然后我开始阅读exif数据:
ExifInterface exifReader = new ExifInterface(mFilePath);
exifReader.getAttributeInt(ExifInterface.TAG_ORIENTATION, -1);
Run Code Online (Sandbox Code Playgroud)
这也为每个图像返回0.任何人都有关于如何正确获取Android照片的方向的想法?
我正在研究一个简单的视频设备,我想介绍一些标准的酷相机功能.其中我想介绍一下
现在我正在寻找一些例子,如何实现这些功能.你有任何有用的链接吗?
编辑:好的,我将使用标准的CCD相机,它可以提供约20fps的~1MPix分辨率.我打算用C#编写它,如果出现性能问题,我会使用C++.我将有镜头+ CCD相机+电机.
编辑:我想看一些更详细的算法描述.我肯定有些人必须在大学课程中教授,但我找不到一些麻烦.对于焦点指示器我尝试了一种原始方法,但在某些情况下它失败了.
int verticalPoints = 0, horizontalPoints = 0;
///Calculate the vertical differences
for (int x = 0; x < toAnalyze.Width; x++)
{
for (int y = 1; y < toAnalyze.Height; y++)
{
byte* pixel = (byte*)data.Scan0 + y * stride + x;
verticalDiff += Math.Abs(*pixel - *(pixel - stride));;
}
}
verticalDiff /= toAnalyze.Width * (toAnalyze.Height-1);
///Calculate horizontal differences
for (int y = 0; y < toAnalyze.Height; y++)
{
for (int x = …Run Code Online (Sandbox Code Playgroud) 我正在编写一个使用相机的Android应用程序.我将相机显示方向设置为90,我的活动是纵向:
camera.setDisplayOrientation(90);
Run Code Online (Sandbox Code Playgroud)
我得到一个很好的预览图片,但生成的图像旋转到-90度(逆时针)和
exif.getAttribute(ExifInterface.TAG_ORIENTATION)
Run Code Online (Sandbox Code Playgroud)
返回ORIENTATION_NORMAL
是否是预期的行为?我应该在捕获后旋转结果图像吗?
设备 - Nexus S,API - 10
出于某些奇怪的原因,我不断遇到不同类型的Android设备的问题,用于将捕获的图像保存在设备存储上.
这里是详细的错误日志,实际上是什么.
java.io.IOException: open failed: EACCES (Permission denied)
at java.io.File.createNewFile(File.java:940)
at com.parkhya.pick_for_shareAflash.HomeActivity.resizeImage(HomeActivity.java:456)
at com.parkhya.pick_for_shareAflash.HomeActivity.onActivityResult(HomeActivity.java:393)
Caused by: libcore.io.ErrnoException: open failed: EACCES (Permission denied)
at java.io.File.createNewFile(File.java:933)
Run Code Online (Sandbox Code Playgroud)
虽然,所有其他Android应用程序,如Instagram和其他人,都可以保存设备上的相机点击图像.任何人,请你建议,为了我的应用程序,我应该怎么做,将相机图片保存在SD卡中.
我有一个自定义相机在某些设备上工作正常.它适用于三星Galaxy Gran Duos(三星-gt i9082,Android 4.2.2)但是当我尝试捕捉图像时,我之前放大了,它冻结了,没有崩溃,唯一的出路就是按下返回键.这只发生在三星Galaxy Gran Duos上.
我用来拍照的代码:
Camera.PictureCallback photoCallback = new Camera.PictureCallback() {
public void onPictureTaken(byte[] data, Camera camera) {
try {
} catch (Exception e) {
if (flePicture== null){
Log.d("camera", "Error creating media file, check storage permissions: " +
e.getMessage());
return;
}
}
try {
FileOutputStream fos = new FileOutputStream(flePicture);
fos.write(data);
fos.close();
} catch (FileNotFoundException e) {
Log.d("camera", "File not found: " + e.getMessage());
} catch (IOException e) {
Log.d("camera", "Error accessing file: " + e.getMessage());
}
} …Run Code Online (Sandbox Code Playgroud) 我正在编写一个应用程序,相机是一个必不可少的功能.在这方面,我希望100%确定以下几个方面:
在任何情况下,使用设备的相机并使其在几乎所有目标设备上运行都是非常棘手的(因为现在我很高兴掌握了"旧"相机......).因此,我真的想确定以上几点.非常感谢你的回答.
例外情况是:
file:// Uri exposed through ClipData.Item.getUri()
java.lang.Throwable: file:// Uri exposed through ClipData.Item.getUri()
at android.os.StrictMode.onFileUriExposed(StrictMode.java:1618)
at android.net.Uri.checkFileUriExposed(Uri.java:2341)
at android.content.ClipData.prepareToLeaveProcess(ClipData.java:808)
at android.content.Intent.prepareToLeaveProcess(Intent.java:7926)
at android.app.Instrumentation.execStartActivity(Instrumentation.java:1506)
at android.app.Activity.startActivityForResult(Activity.java:3832)
at android.app.Activity.startActivityForResult(Activity.java:3783)
at android.support.v4.app.FragmentActivity.startActivityFromFragment(Unknown Source)
at android.support.v4.app.Fragment.startActivityForResult(Unknown Source)
at me.chunyu.ChunyuDoctor.Utility.w.takePhoto(Unknown Source)
at me.chunyu.ChunyuDoctor.Dialog.ChoosePhotoDialogFragment.takePhoto(Unknown Source)
at me.chunyu.ChunyuDoctor.Dialog.ChoosePhotoDialogFragment.access$000(Unknown Source)
at me.chunyu.ChunyuDoctor.Dialog.b.onClick(Unknown Source)
at me.chunyu.ChunyuDoctor.Dialog.ChoiceDialogFragment.onClick(Unknown Source)
at android.view.View.performClick(View.java:4848)
at android.view.View$PerformClick.run(View.java:20270)
at android.os.Handler.handleCallback(Handler.java:815)
at android.os.Handler.dispatchMessage(Handler.java:104)
at android.os.Looper.loop(Looper.java:194)
at android.app.ActivityThread.main(ActivityThread.java:5643)
at java.lang.reflect.Method.invoke(Native Method)
at java.lang.reflect.Method.invoke(Method.java:372)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:960)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:755)
Run Code Online (Sandbox Code Playgroud)
我的代码在这里:
public static void takePhoto(Fragment fragment, int token, Uri uri) {
Intent …Run Code Online (Sandbox Code Playgroud) 我正在使用在网络浏览器中从相机设备navigator.mediaDevices.getUserMedia打开MediaStream。我的应用程序想要在 WebAssembly 中进行一些实时图像处理,为此,我需要直接从相机提供实时图像流。
我的解决方案在大多数设备上都运行良好,但是,我在具有多个后置摄像头的设备上遇到了问题,例如 Android 版 Google Chrome 上的三星 Galaxy S10。问题在于以下代码段:
const constraints = {
audio: false,
video: {
width: { min: 640, ideal: 1280, max: 1920 },
height: { min: 480, ideal: 720, max: 1080 },
facingMode: { ideal: 'environment' },
}
};
const stream = await navigator.mediaDevices.getUserMedia( constraints );
Run Code Online (Sandbox Code Playgroud)
总是打开一个错误的相机 - 不支持自动对焦并提供对我的代码来说太扭曲的图像的广角镜头相机。广角镜头适合风景摄影,但对于条码和文本扫描却很糟糕。
如何使用MediaTrackConstraints选择正确的相机?我也试过添加
focusMode: { ideal: 'continuous' }
Run Code Online (Sandbox Code Playgroud)
到约束(根据MDN 文档,这应该是图像轨道的可能约束),但它似乎不起作用。
我也尝试枚举所有设备(来自这个 SO answer),但我不知道如何正确选择正确的相机。
值得注意的是,这个代码片段:
const devices = await …Run Code Online (Sandbox Code Playgroud) 我正在开发2.2中的Android应用程序,它使用Camera.现在任何人都可以告诉我"是否有可能以编程方式确定Android中的百万像素的相机分辨率"
从多窗口文档:
多窗口模式下禁用的功能
当设备处于多窗口模式时,某些功能被禁用或忽略,因为它们对于可能与其他活动或应用共享设备屏幕的活动没有意义.这些功能包括:
- 某些系统UI自定义选项已禁用; 例如,如果应用程序未以全屏模式运行,则无法隐藏状态栏.
- 系统忽略对android:screenOrientation属性的更改.
我得到了大多数应用程序,纵向和横向模式之间的区别是没有意义的,但是我正在使用SDK,其中包含用户可以进行任何活动的摄像机视图 - 包括支持多窗口模式的活动.问题是摄像机视图包含显示摄像机预览的SurfaceView/TextureView,并且为了在所有活动方向上正确显示预览,需要有关正确活动方向的知识,以便可以正确旋转摄像机预览.
问题是我的代码通过检查当前配置方向(纵向或横向)和当前屏幕旋转来计算正确的活动方向.问题是在多窗口模式下,当前配置方向不反映真实的活动方向.这会导致相机预览旋转90度,因为Android报告的配置与方向不同.
我目前的解决方法是检查所请求的活动方向并以此为基础,但有两个问题:
即使在多窗口配置中,有没有办法可以稳健地计算正确的活动方向?
这是我目前使用的代码(请参阅有问题的部分的注释):
protected int calculateHostScreenOrientation() {
int hostScreenOrientation = ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED;
WindowManager wm = (WindowManager) getContext().getSystemService(Context.WINDOW_SERVICE);
int rotation = getDisplayOrientation(wm);
boolean activityInPortrait;
if ( !isInMultiWindowMode() ) {
activityInPortrait = (mConfigurationOrientation == Configuration.ORIENTATION_PORTRAIT);
} else {
// in multi-window mode configuration orientation can be landscape even if activity is actually in portrait and vice versa
// Try determining from requested orientation (not entirely correct, …Run Code Online (Sandbox Code Playgroud) camera android multi-window android-camera android-7.0-nougat
camera ×10
android ×9
algorithm ×1
c# ×1
camera2 ×1
denied ×1
deprecated ×1
exif ×1
freeze ×1
ioexception ×1
javascript ×1
mediastore ×1
multi-window ×1
orientation ×1
permissions ×1
photo ×1
resolution ×1
rotation ×1
uri ×1
webrtc ×1