- r - 以节省内存的方式增长 data.frame
- ruby-on-rails - ruby/ruby on rails 内存泄漏检测
- android - 无法解析导入android.support.v7.app
- UNIX 域套接字与共享内存(映射文件)
我有这个以纵向模式运行的应用程序,作为一个 Activity 的一部分,我有一个相机对象作为 fragment 运行。
我可以选择从前置摄像头切换到后置摄像头,使用后置摄像头拍照时一切正常。
不过,当我使用前置摄像头拍照时,它们会反转 180 度。现在我知道这可能与处于纵向模式的方向有关,但是将其置于横向模式只会扼杀我的应用程序的想法。
是否可以解决此问题,使拍摄的照片与您在预览中看到的相同?
listener = new OrientationEventListener(this.getActivity(),SensorManager.SENSOR_DELAY_NORMAL){
@Override
public void onOrientationChanged(int orientation) {
// TODO Auto-generated method stub
if (orientation == ORIENTATION_UNKNOWN) return;
android.hardware.Camera.CameraInfo info =
new android.hardware.Camera.CameraInfo();
android.hardware.Camera.getCameraInfo(mCurrentCamera, info);
orientation = (orientation + 45) / 90 * 90;
int rotation = 0;
if (info.facing == CameraInfo.CAMERA_FACING_FRONT) {
rotation = (info.orientation - orientation + 360) % 360;
} else { // back-facing camera
rotation = (info.orientation + orientation) % 360;
}
if (mCamera.getParameters() != null){
Camera.Parameters mParameters = mCamera.getParameters();
mParameters.setRotation(rotation);
mCamera.setParameters(mParameters);
}
}
};
listener.enable();
if (listener.canDetectOrientation())
Log.d("Orientation Possible", "Orientation Possible");
问题是,在我尝试拍照后,这个东西崩溃了。此外,如果它仅在预览模式下运行一段时间,它会再次崩溃。我还应该补充一点,我正在用另一种方法这样做。
public void switchCamera(Camera camera) {
setCamera(camera);
try {
camera.setPreviewDisplay(mHolder);
} catch (IOException exception) {
Log.e(TAG, "IOException caused by setPreviewDisplay()", exception);
}
Camera.Parameters parameters = camera.getParameters();
parameters.setPreviewSize(mPreviewSize.width, mPreviewSize.height);
requestLayout();
try{
camera.setParameters(parameters);
}
catch (RuntimeException ex){
Log.d("Preview", "Failure to set proper parameters");
//need to improve this method
if (mSupportedPreviewSizes != null) {
Camera.Size cs = mSupportedPreviewSizes.get(0);
parameters.setPreviewSize(cs.width, cs.height);
camera.setParameters(parameters);
requestLayout();
//int tempheight = mPreviewSize.height;
//mPreviewSize.height = mPreviewSize.width;
//mPreviewSize.width = tempheight;
}
}
当您在相机之间切换时调用此方法(反之亦然)。这会干扰方向事件监听器吗?
另外,当保存拍摄的照片时,这就是我所说的。在它只是将数据作为参数之前,但我试图让它也采用屏幕方向。问题是屏幕方向始终是 90,无论如何。所以位图将始终旋转 90 度(这对于使用后置摄像头拍照非常有用)但在使用前置摄像头拍摄时会反转它。可以在这个函数中实现修复吗?
public static Bitmap MakeSquare(byte[] data, int orientation) {
int width;
int height;
// Rotate photo
Matrix matrix = new Matrix();
matrix.postRotate(orientation);
// Convert ByteArray to Bitmap
Bitmap bitPic = BitmapFactory.decodeByteArray(data, 0, data.length);
width = bitPic.getWidth();
height = bitPic.getHeight();
// Create new Bitmap out of the old one
Bitmap bitPicFinal = Bitmap.createBitmap(bitPic, 0, 0, width, height,matrix, true);
bitPic.recycle();
int desWidth;
int desHeight;
desWidth = bitPicFinal.getWidth();
desHeight = desWidth;
Bitmap croppedBitmap = Bitmap.createBitmap(bitPicFinal, 0,bitPicFinal.getHeight() / 2 - bitPicFinal.getWidth() / 2,desWidth, desHeight);
croppedBitmap = Bitmap.createScaledBitmap(croppedBitmap, 528, 528, true);
return croppedBitmap;
}
最佳答案
好吧好吧。看来我有点照顾它了。我使用了以下建议:Android, front and back camera Orientation , Landscape
并将我的 MakeSquare 函数更改为:
public static Bitmap MakeSquare(byte[] data, int cameraID) {
int width;
int height;
Matrix matrix = new Matrix();
Camera.CameraInfo info = new Camera.CameraInfo();
android.hardware.Camera.getCameraInfo(cameraID, info);
// Convert ByteArray to Bitmap
Bitmap bitPic = BitmapFactory.decodeByteArray(data, 0, data.length);
width = bitPic.getWidth();
height = bitPic.getHeight();
// Perform matrix rotations/mirrors depending on camera that took the photo
if (info.facing == Camera.CameraInfo.CAMERA_FACING_FRONT)
{
float[] mirrorY = { -1, 0, 0, 0, 1, 0, 0, 0, 1};
Matrix matrixMirrorY = new Matrix();
matrixMirrorY.setValues(mirrorY);
matrix.postConcat(matrixMirrorY);
}
matrix.postRotate(90);
// Create new Bitmap out of the old one
Bitmap bitPicFinal = Bitmap.createBitmap(bitPic, 0, 0, width, height,matrix, true);
bitPic.recycle();
int desWidth;
int desHeight;
desWidth = bitPicFinal.getWidth();
desHeight = desWidth;
Bitmap croppedBitmap = Bitmap.createBitmap(bitPicFinal, 0,bitPicFinal.getHeight() / 2 - bitPicFinal.getWidth() / 2,desWidth, desHeight);
croppedBitmap = Bitmap.createScaledBitmap(croppedBitmap, 528, 528, true);
return croppedBitmap;
}
这似乎奏效了。虽然我不确定这是最好的方法,但我很满意。现在我要做的就是弄清楚为什么它在使用前置摄像头时没有采用正确的纵横比。
关于Android 前置摄像头拍摄倒置照片,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10283467/
这个问题在这里已经有了答案: Invert rounded corner in CSS? (11 个答案) 关闭 8 年前。 当我想到为我的链接制作标签(或标签)时,我正在处理我网站的 CSS。我在
我是 Flutter 的新手,我正在尝试编写一个库来允许用户平移/缩放他们的个人资料图片。 为了使其视觉化,我想用“倒置”的 ClipOval 堆叠他们的图片,以显示边界。 到目前为止,这是我得到的结
我正在为我的一个应用程序使用具有垂直滚动方向的 Collection View 。在这里,我想让我的 Collection View 在不使用任何 CGAffine 变换的情况下倒置显示。是否可以在
我正在构建一个应用程序,我需要在其中从自定义相机拍摄照片并且 View 是倒置或旋转的(当我上下移动它时,图片会横向移动)。 知道为什么会这样以及如何解决这个问题吗? 这是相机的代码: class P
我在 Bootstrap 中使用轮播,我的一些图片是颠倒的。我在我的图片配置中搜索,之前我尝试将它们颠倒过来但没有结果。你知道这个类或javascript函数吗?非常感谢。 标记 最佳答案 如我的
我是 Canvas 的新手,想知道: 使用倒笛卡尔坐标系的基本原理。 比如说,我需要在直方图中绘制一些值。是一种将 Canvas 框架旋转/映射到笛卡尔坐标系的简单方法。? 最佳答案 Canvas 是
在jsp中实现如图所示的金字塔, 代码如下: 大致思路如下: 1、先画出前5行。因为 i+空格数=总行数,所以第一行的空格数是 总行数-i(第几行),然后画出 *,*的数目=2*i-11;
使用 xcode 6.3.2 中的自动布局功能,我能够为 iPad 和 iPhone 调整我的 View 、按钮和文本字段。但是对于颠倒我的观点并没有改变,任何想法我们如何使用自动布局支持颠倒模式而不
继http://stackoverflow.com/questions/18766430/how-can-i-do-d3-svg-arc-within-a-given-map-projection之后
我在 Xcode 中使用 C++ 进行编程,我试图打印出一个数组,但所有打印出来的都是“\377”和一个颠倒的“?”在它的末尾。这是什么意思? 最佳答案 您可能以 UTF-16 生成了您在 Windo
我正在尝试用白色而不是黑色绘制标准 NSImage。下面的代码在当前 NSGraphicsContext 中以黑色绘制图像时效果很好: NSImage* image = [NSImage imageN
我正在学习p5 js并尝试制作一个简单的2d蛇游戏,但是当我按键盘上的向上箭头时,矩形(蛇仍然不存在)向下移动,当我按向下箭头时,它移动向上 function keyPressed() { if (k
我正在做的是通过 CIDetector 检测面部,我的图像来自 UIImagePickerController(从后置摄像头捕获图像)。我可以检测到人脸..但我的问题是我的人脸图像倒置(从上到下)。这
在 iOS8 设备或 iOS8 模拟器上: 我有一个成为第一响应者的 UITextView。一切正常,直到应用退出事件状态(通过按下主页键)。 应用程序再次激活后,键盘的外观发生了变化 - 参见图片
我是一名优秀的程序员,十分优秀!