当我使用Androids相机应用程序拍照时,它会检测手机的方向并相应地保存照片.因此,如果我拍摄建筑物的照片,无论是将手机置于横向位置还是纵向,屋顶都将位于顶部.
但是,当我使用时
Intent imageCaptureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
要获得图片,相机应用程序不会对方向做出反应.如果我垂直握住手机(人像),结果图片将会旋转,所述建筑物的屋顶位于屏幕左侧.
如何设置意图以使相机考虑方向?
或者我可以在某种程度上推断出拍摄照片的方向,然后自己旋转它?
或者任何其他建议将不胜感激.
〜提前致谢,最好的问候.
我正在尝试使用新AVFoundation framework的iPhone拍摄静态照片.
按下按钮可以调用此方法.我可以听到快门声,但我看不到日志输出.如果我多次调用此方法,相机预览将冻结.
有没有任何教程如何使用captureStillImageAsynchronouslyFromConnection?
[[self stillImageOutput] captureStillImageAsynchronouslyFromConnection:
[[self stillImageOutput].connections objectAtIndex:0]
completionHandler:^(CMSampleBufferRef imageDataSampleBuffer,
NSError *error) {
NSLog(@"inside");
}];
Run Code Online (Sandbox Code Playgroud)
- (void)initCapture {
AVCaptureDeviceInput *captureInput = [AVCaptureDeviceInput
deviceInputWithDevice:[AVCaptureDevice defaultDeviceWithMediaType:AVMediaTypeVideo]
error:nil];
AVCaptureVideoDataOutput *captureOutput = [[AVCaptureVideoDataOutput alloc] init];
captureOutput.alwaysDiscardsLateVideoFrames = YES;
dispatch_queue_t queue;
queue = dispatch_queue_create("cameraQueue", NULL);
[captureOutput setSampleBufferDelegate:self queue:queue];
dispatch_release(queue);
NSString* key = (NSString*)kCVPixelBufferPixelFormatTypeKey;
NSNumber* value = [NSNumber numberWithUnsignedInt:kCVPixelFormatType_32BGRA];
NSDictionary* videoSettings = [NSDictionary dictionaryWithObject:value forKey:key];
[captureOutput setVideoSettings:videoSettings];
self.captureSession = [[AVCaptureSession alloc] init];
self.captureSession.sessionPreset = AVCaptureSessionPresetLow;
[self.captureSession addInput:captureInput];
[self.captureSession addOutput:captureOutput];
self.prevLayer … Apple建议不要搜索硬件版本,而是搜索您感兴趣的特定功能.
那么如何检测设备上是否有前置摄像头才能禁用某些功能?
[UIImagePickerController isSourceTypeAvailable: UIImagePickerControllerSourceTypeCamera] 只告诉某个地方有摄像头.
我一直在使用自定义覆盖UIImagePickerController控制器,一切正常.我已经添加了按钮,可以在前后摄像头之间切换 -
- (IBAction)changeCamera:(id)sender {
if (self.imagePicker.cameraDevice == UIImagePickerControllerCameraDeviceRear) {
self.imagePicker.cameraDevice = UIImagePickerControllerCameraDeviceFront;
}
else {
self.imagePicker.cameraDevice = UIImagePickerControllerCameraDeviceRear;
}
}
Run Code Online (Sandbox Code Playgroud)
问题是,开关没有动画.我一直在使用建立在UIImagePicker之上的苹果相机应用程序,并且开关正在发生动画.我该怎么做呢?
我有一个可以制作图片并上传它们的应用程序.上传需要照片的文件路径,但我无法得到它.
这是我的代码:
public void maakfoto (View v) {
Intent cameraIntent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
cameraIntent.putExtra(MediaStore.EXTRA_OUTPUT, mImageCaptureUri);
startActivityForResult(cameraIntent, CAMERA_REQUEST);
}
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (requestCode == CAMERA_REQUEST && resultCode == RESULT_OK) {
Bitmap photo = (Bitmap) data.getExtras().get("data");
imageView.setImageBitmap(photo);
knop.setVisibility(Button.VISIBLE);
System.out.println(mImageCaptureUri);
}
}
Run Code Online (Sandbox Code Playgroud)
请帮我看一下文件路径.
谢谢
我写的自定义相机应用程序停止在屏幕锁定后进行预览(通过按下锁定按钮或等待几分钟).我没有得到例外,这使得很难找到问题.
Android屏幕锁定(如果这是正确的术语)暂停/暂停/ ...我的应用程序(活动)?
如果是这种情况,原因可能是我的onPause/onResume方法吗?或者可能是另一个原因吗?
提前致谢
我试图创建一个简单的相机应用程序进行研究.我阅读Android Camera Official Document然后开始编码.所以我做了一些步骤让它发挥作用
1.在应用中添加了相机功能所需的权限.
2.我的活动仅限于PORTRAIT模式.
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
3.增加了几个相机回调以使我的相机工作.
4.In surfaceChanged方法,我自定义相机设置.到目前为止,我已经为几乎所有Android设备工作了
但随后我在Android版2.3.6的三星Galaxy ACE上进行了测试,发现Camera Display Preview已转为横向模式.
因此,在记录了log-cat/break点后,我发现下面的方法对于这个特定的模型不起作用
//This method is not working for Samsung Galaxy ACE
camera.setDisplayOrientation(90);
//or
parameters.set("orientation", "portrait");
//or
parameters.setRotation(90);
Run Code Online (Sandbox Code Playgroud)
注意: 我在Google和SO上搜索了大量解决方案,但到目前为止还没有任何运气
供您参考我的示例代码如下
@Override
public void surfaceChanged(SurfaceHolder arg0, int arg1, int arg2, int arg3) {
Log.v(TAG, "surfaceChanged get called"); …Run Code Online (Sandbox Code Playgroud) 我想要实现的是捕获图片而不显示预览,直接将输出发送到ImageReader.我使用Camera2Basic示例作为起点.但是,我的调用ImageReader永远不会被调用,因此没有图像被发送到它Surface.我真的需要先显示预览吗?
这是摄像机代码,它按照异步回调的流程排序:
private ImageReader imageReader;
private Handler backgroundHandler;
private HandlerThread backgroundThread;
private String cameraId;
private CameraDevice cameraDevice;
private CameraCaptureSession cameraCaptureSession;
@Override
public void onCreate() {
setupCamera2();
}
private void setupCamera2() {
CameraManager manager = (CameraManager) getSystemService(Context.CAMERA_SERVICE);
try {
for (String cameraId : manager.getCameraIdList()) {
CameraCharacteristics characteristics = manager.getCameraCharacteristics(cameraId);
if (characteristics.get(CameraCharacteristics.LENS_FACING) != CameraCharacteristics.LENS_FACING_FRONT) {
continue;
}
this.cameraId = cameraId;
int[] picSize = Settings.getPictureSize();
int picWidth = picSize[0];
int picHeight = picSize[1];
imageReader = …Run Code Online (Sandbox Code Playgroud) 在过去的几周里,我一直在尝试学习libGDX库.我发现很难,尤其是我第一次尝试游戏开发时,要理解相机/视口关系系统.我被告知使用的一行代码和API提到的是:
batch.setProjectionMatrix(camera.combined);
Run Code Online (Sandbox Code Playgroud)
尽管进行了4个小时的研究,但我仍然缺乏对此代码功能的完整理解.根据我的基本理解,它"告诉"相机正在寻找的批次.我缺乏理解力令人沮丧和愤怒,如果有人能帮助我,我会很感激.代码片段的另一个问题是我不确定何时需要实现(在render方法中,create方法等).
我有一个相机应用程序,锁定到景观.需要时,我会旋转从中获取的原始字节,onPreviewFrame()并使用它们对视频进行编码.
然而,这种方法在Nexus 5X和6设备中失败了,因为它们的反向传感器让我倒置了帧.
随着旋转的预览会不会帮助我在这种情况下,描述在这里:
这不影响在onPreviewFrame(byte [],Camera)中传递的字节数组的顺序
我想知道是否有任何方法可以检测相机传感器是否反转和/或原始帧是否颠倒,因此在旋转时会增加额外的校正.