我正在使用相机LED灯FLASH_MODE_ON.
三星Galaxy Ace只有三种闪光模式:开,关和自动.
FLASH_MODE_TORCH 不适用于三星Galaxy Tab和三星Galaxy Ace 2.2.1
这是我的代码如何打开我的相机LED
Camera cam;
cam = Camera.open();
Parameters params = cam.getParameters();
params.setFlashMode(Parameters.FLASH_MODE_ON);
cam.setParameters(params);
cam.startPreview();
cam.autoFocus(new AutoFocusCallback() {
public void onAutoFocus(boolean success, Camera camera) {
}
});
Run Code Online (Sandbox Code Playgroud)
并通过使用以下来关闭它:
cam.stopPreview();
cam.release();
Run Code Online (Sandbox Code Playgroud)
代码参考:在Android中使用相机手电筒
但问题是LED灯仅持续5秒钟.然后它会自动关闭.
任何人都可以告诉问题可能在哪里.或者任何方式连续打开LED灯直到它要求停止.
我按照Android开发站点上的Camera上的说明进行操作
我只是启动Camera Intent,而不是自己制作相机.
拍照后处理结果返回的示例代码如下.
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (requestCode == CAPTURE_IMAGE_ACTIVITY_REQUEST_CODE) {
if (resultCode == RESULT_OK) {
// Image captured and saved to fileUri specified in the Intent
Toast.makeText(this, "Image saved to:\n" +
data.getData(), Toast.LENGTH_LONG).show();
} else if (resultCode == RESULT_CANCELED) {
// User cancelled the image capture
} else {
// Image capture failed, advise user
}
}
if (requestCode == CAPTURE_VIDEO_ACTIVITY_REQUEST_CODE) {
if (resultCode == RESULT_OK) {
// Video captured …Run Code Online (Sandbox Code Playgroud) 我正在创建一个相机应用程序,它实现了自己的相机预览拍照.该应用程序目前被强制进入纵向模式.
我的问题是相机的预览稍微拉长(纵横比有点偏).有趣的是,我将SurfaceView大小设置为始终与预览大小匹配.这确保了纵横比应始终保持不变......但它不是......
这是我用来显示我的相机预览的布局:
public class Cp extends ViewGroup implements SurfaceHolder.Callback {
private final String TAG = "CameraPreview";
private boolean mPreviewRunning = false;
private SurfaceView mSurfaceView;
private SurfaceHolder mHolder;
private Size mPreviewSize;
private List<Size> mSupportedPreviewSizes;
private Camera mCamera;
public boolean IsPreviewRunning() {
return mPreviewRunning;
}
public Cp(Context context) {
this(context, null, 0);
}
public Cp(Context context, AttributeSet attrs) {
this(context, attrs, 0);
}
public Cp(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
mSurfaceView = new SurfaceView(context);
addView(mSurfaceView);
// Install …Run Code Online (Sandbox Code Playgroud) 我希望我的代码在保存之前调整图像大小,但我在Google上找不到任何关于它的信息.请问你能帮帮我吗 ?
这是代码(来自Android doc):
private void galleryAddPic() {
Intent mediaScanIntent = new Intent("android.intent.action.MEDIA_SCANNER_SCAN_FILE");
File f = new File(mCurrentPhotoPath);
picturePathForUpload = mCurrentPhotoPath;
Uri contentUri = Uri.fromFile(f);
mediaScanIntent.setData(contentUri);
this.sendBroadcast(mediaScanIntent);
}
Run Code Online (Sandbox Code Playgroud)
之后,我必须将其上传到服务器.
非常感谢.
我正在尝试使用相机拍摄照片.默认情况下预览是横向模式,我可以使用它将其更改为纵向模式
setCameraDisplayOrientation(this,1, mCamera);
public static void setCameraDisplayOrientation(Activity activity,
int cameraId, android.hardware.Camera camera) {
android.hardware.Camera.CameraInfo info =
new android.hardware.Camera.CameraInfo();
android.hardware.Camera.getCameraInfo(cameraId, info);
int rotation = activity.getWindowManager().getDefaultDisplay()
.getRotation();
int degrees = 0;
switch (rotation) {
case Surface.ROTATION_0: degrees = 0; break;
case Surface.ROTATION_90: degrees = 90; break;
case Surface.ROTATION_180: degrees = 180; break;
case Surface.ROTATION_270: degrees = 270; break;
}
int result;
if (info.facing == Camera.CameraInfo.CAMERA_FACING_FRONT) {
result = (info.orientation + degrees) % 360;
result = (360 - result) % 360; // compensate …Run Code Online (Sandbox Code Playgroud) 混合来自OpenGL和Android相机的视图时图像失真,以便在使用takepicture方法时获取两者的图像.我查了一下,发现相机图片设置为640X480,openGL视图和相机预览都设置为1280x720.
所以我将相机图片大小设置为1280x720,结果非常完美.但是我无法在代码中设置大小,因为每个Android设备都会有所不同,并且每个设备都必须从支持的大小列表中选择预览大小和图片大小的设置.
考虑到这里有三个变量,活动布局的屏幕尺寸,相机预览尺寸和图片尺寸,最好的方法是什么.
是最好使用match_parent或fitXY作为FrameLayout大小,只能使用两个变量,预览大小和图片大小?
请注意预览大小和图片大小中的几个宽度和高度组合是相同的.例如1280 x 720同时存在于预览和图片中,是否总是会出现两种尺寸的匹配?
List<Size> previewSizes = mCamera.getParameters().getSupportedPreviewSizes();
List<Size> imageSizes = mCamera.getParameters().getSupportedPictureSizes();
// layout in the activity that the cameraView will placed in
int layoutWidth = frameLayout.getWidth();
int layoutHeight = frameLayout.getHeight();
Run Code Online (Sandbox Code Playgroud)
例如,在测量后的一个Android平板电脑中,这些是使用的3个变量的结果
作为测量结果的活动中布局viewGroup的大小
1280 x 736
Run Code Online (Sandbox Code Playgroud)
支持的图片尺寸
320 x 240
640 x 480
1024 x 768
1280 x 720 << best size in my example to use
1280 x 768
1280 x 920
1600 x 1200
2048 x 1536
2560 x 1440
2560 x 1536
2560 x …Run Code Online (Sandbox Code Playgroud) 我正在尝试用来ImageReader从相机中获取RGB图像.我在运行开发者预览版的Nexus 5上使用Android 5.0"L"的Camera2 API.
我已经SurfaceView配置了RGB图像,工作正常,我知道相机硬件产生RGB数据(因为Android上的所有色调映射和颜色增益设置都指定在RGB通道上运行).
我可以通过以下方式创建ImageReader从ImageReader获取YUV_420_888图像:
imageReader = ImageReader.newInstance(W, H, ImageFormat.YUV_420_888, 4);
Run Code Online (Sandbox Code Playgroud)
然后将YUV图像转换为RGB.然而,这引入了不希望的量化误差(因为我的应用需要RGB图像)和不必要的处理时间.
但是,当我尝试以这种方式创建图像阅读器时:
imageReader = ImageReader.newInstance(W, H, PixelFormat.RGB_888, 4);
Run Code Online (Sandbox Code Playgroud)
图像捕获失败,但出现以下异常:
java.lang.UnsupportedOperationException: The producer output buffer format 0x22 doesn't match the ImageReader's configured buffer format 0x3.
at android.media.ImageReader.nativeImageSetup(Native Method)
at android.media.ImageReader.acquireNextSurfaceImage(ImageReader.java:293)
at android.media.ImageReader.acquireNextImage(ImageReader.java:339)
at android.media.ImageReader.acquireLatestImage(ImageReader.java:243)
at <my code...>
Run Code Online (Sandbox Code Playgroud)
我在两条战线上感到困惑.首先,提到的输出格式0x22不在PixelFormat或ImageFormat中.它似乎是某种未记录的原始模式,但我不能ImageReader.newInstance(W, H, 0x22, 4)用来捕获它(我得到java.lang.UnsupportedOperationException: Invalid format specified 34).我希望以原始格式捕获,但我不能说服ImageFormat接受它(并且由于ImageFormat.RAW_SENSOR某种原因,其他原始格式非常慢).
其次,SurfaceView已经很乐意消费RGB_888图像(据我所知),并将它们直接放在屏幕上.那么为什么不能ImageReader正确接受RGB图像呢?我做错了什么?
所以,我有以下代码打开相机,捕获图像并将其保存在SDCard上.
public void getPhotoFromCamera() {
Intent takePictureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
File mediaStorageDir = new File(
Environment.getExternalStorageDirectory()
+ File.separator
+ getString(R.string.directory_name_corp_chat)
+ File.separator
+ getString(R.string.directory_name_temp)
);
if (!mediaStorageDir.exists()) {
mediaStorageDir.mkdirs();
}
String timeStamp = new SimpleDateFormat("yyyyMMdd_HHmmss",
Locale.getDefault()).format(new Date());
try {
mediaFile = File.createTempFile(
"TEMP_FULL_IMG_" + timeStamp,
".jpg",
mediaStorageDir
);
takePictureIntent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(mediaFile));
startActivityForResult(takePictureIntent, PICK_FROM_CAMERA);
} catch (IOException e) {
e.printStackTrace();
}
}
private void performCrop(Uri picUri) {
try {
Intent cropIntent = new Intent("com.android.camera.action.CROP");
cropIntent.setDataAndType(picUri, "image/*");
cropIntent.putExtra("crop", "true");
cropIntent.putExtra("aspectX", 1);
cropIntent.putExtra("aspectY", 1); …Run Code Online (Sandbox Code Playgroud) 我用下面的代码用相机拍照.而不是保存我想编码它,Base64然后将其作为输入传递给另一个API.我看不到方法,如何修改代码来Base64代替常规文件拍照.
public class CameraDemoActivity extends Activity {
int TAKE_PHOTO_CODE = 0;
public static int count = 0;
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
final String dir = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES) + "/picFolder/";
File newdir = new File(dir);
newdir.mkdirs();
Button capture = (Button) findViewById(R.id.btnCapture);
capture.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
count++;
String file = dir+count+".jpg";
File newfile = new File(file);
try {
newfile.createNewFile();
}
catch (IOException e)
{
}
Uri outputFileUri = Uri.fromFile(newfile);
Intent cameraIntent …Run Code Online (Sandbox Code Playgroud) android ×10
android-camera ×10
base64 ×1
bitmap ×1
camera ×1
flashlight ×1
galaxy ×1
image ×1
opencv ×1
surfaceview ×1