我正在捕捉图像并将其设置为图像视图.
public void captureImage() {
Intent intentCamera = new Intent("android.media.action.IMAGE_CAPTURE");
File filePhoto = new File(Environment.getExternalStorageDirectory(), "Pic.jpg");
imageUri = Uri.fromFile(filePhoto);
MyApplicationGlobal.imageUri = imageUri.getPath();
intentCamera.putExtra(MediaStore.EXTRA_OUTPUT, imageUri);
startActivityForResult(intentCamera, TAKE_PICTURE);
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent intentFromCamera) {
super.onActivityResult(requestCode, resultCode, intentFromCamera);
if (resultCode == RESULT_OK && requestCode == TAKE_PICTURE) {
if (intentFromCamera != null) {
Bundle extras = intentFromCamera.getExtras();
if (extras.containsKey("data")) {
bitmap = (Bitmap) extras.get("data");
}
else {
bitmap = getBitmapFromUri();
}
}
else {
bitmap = getBitmapFromUri();
}
// …Run Code Online (Sandbox Code Playgroud) 我想从画廊创建一个图片选择器.我用代码
intent = new Intent(Intent.ACTION_PICK, android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
startActivityForResult(intent, TFRequestCodes.GALLERY);
Run Code Online (Sandbox Code Playgroud)
我的问题是在此活动中显示视频文件.有没有办法过滤显示的文件,以便在此活动中不显示任何视频文件?
我想让用户从图库中选择个人资料图片.我的问题是有些图片是向右旋转的.
我像这样启动图像选择器:
Intent photoPickerIntent = new Intent();
photoPickerIntent.setType("image/*");
photoPickerIntent.setAction(Intent.ACTION_GET_CONTENT);
startActivityForResult(Intent.createChooser(photoPickerIntent, "Select profile picture"), Global.CODE_SELECT_PICTURE);
Run Code Online (Sandbox Code Playgroud)
我从onActivityResult获取图像,如下所示:
Uri selectedPicture = data.getData();
profilePic = MediaStore.Images.Media.getBitmap(activity.getContentResolver(), selectedPicture);
Run Code Online (Sandbox Code Playgroud)
如何让图像不被旋转?
更新:
根据我收到的一些有用的答案,我设法提出了以下工作解决方案(这只是一个工作代码,写得不好).我很想得到你如何改进它的反馈!
public void onActivityResult(int requestCode, int resultCode, Intent data) {
if (resultCode == Activity.RESULT_OK && requestCode == Global.CODE_SELECT_PICTURE) {
// Get selected gallery image
Uri selectedPicture = data.getData();
// Get and resize profile image
String[] filePathColumn = {MediaStore.Images.Media.DATA};
Cursor cursor = activity.getContentResolver().query(selectedPicture, filePathColumn, null, null, null);
cursor.moveToFirst();
int columnIndex = cursor.getColumnIndex(filePathColumn[0]);
String picturePath = cursor.getString(columnIndex); …Run Code Online (Sandbox Code Playgroud) 我从相机/画廊意图到我的应用程序的照片.在许多手机中,我从意图/ Uri中读取的图片已经旋转到正确的方向.例如N1,Legend,Desire就是这种情况.
但是在某些手机上(例如Milestone1,GalaxyS),无论拍摄图片的方式如何,图片总是在风景中.这意味着在我的应用程序中,纵向图片以错误的方式呈现给用户.我试图读取图片的EXIF信息,但方向标记始终为0.必须有一种方法可以找到图片的正确方向,因为在Milestone1中,图库应用程序正确显示肖像图片.
我如何知道在向用户展示之前是否需要自己旋转图片?
谢谢你的帮助!
在我下面的代码中,我正在尝试使用原生相机拍照并上传到服务器但是当我把它作为肖像并在画廊中查看它作为景观意味着,它旋转到90度.请帮忙: -
Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
startActivityForResult(intent, REQUEST_CAMERA);
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (resultCode == Activity.RESULT_OK) {
if (requestCode == REQUEST_CAMERA) {
handleCameraPhoto();
}
private void handleCameraPhoto() {
Intent mediaScanIntent = new Intent(
"android.intent.action.MEDIA_SCANNER_SCAN_FILE");
File f = new File(mCurrentPhotoPath);
Uri contentUri = Uri.fromFile(f);
mediaScanIntent.setData(contentUri);
getActivity().sendBroadcast(mediaScanIntent);
}
Run Code Online (Sandbox Code Playgroud)
如何在保存到SD卡之前旋转图像?
在过去一个月左右的时间里,我一直在努力解决这个问题.每当我认为我已经修复它似乎以某种形式回来.
这是旧的Android"图像旋转90度"的错误.我已经在这里阅读了无数的帖子(StackOverFlow)以及尝试了很多方法,但似乎无法修复它.
我仍然得到错误旋转的图像.
在我的应用程序中,用户选择他/她的个人资料图片,然后将其设置为ImageView.图像选自Phones Gallery
两天前,我实施了以下代码,这适用于我在手机上测试的所有图像.然而,当我的一位Beta测试者试用它时,他的图像再次被旋转.他把图像发给我测试,但他们在我的手机上显示正常.因此,为什么我越来越沮丧.
这是我用来获取图像方向的方法:
// Gets an Images Orientation
public static int getOrientationEXIF(Context context, Uri uri) {
int orientation = 0;
try {
ExifInterface exif = new ExifInterface(uri.getPath());
orientation = exif.getAttributeInt(ExifInterface.TAG_ORIENTATION, ExifInterface.ORIENTATION_NORMAL);
switch (orientation) {
case ExifInterface.ORIENTATION_ROTATE_90:
orientation = 90;
return orientation;
case ExifInterface.ORIENTATION_ROTATE_180:
orientation = 180;
return orientation;
}
} catch (IOException e) {
e.printStackTrace();
}
return 0;
}
Run Code Online (Sandbox Code Playgroud)
然后我使用此方法获得旋转的位图:
// Rotate a Bitmap
public static Bitmap rotate(float rotationValue, String filePath) {
Bitmap original= BitmapFactory.decodeFile(filePath);
int …Run Code Online (Sandbox Code Playgroud) 我正在使用ExifInterface通过检测方向标签从图库中选取的旋转图像,并且它正在工作。最近我在小米9 SE上测试了应用程序,发现相机拍摄的照片有方向标签8(旋转270),但照片方向是正确的,不需要旋转。为什么方向标签错误?如何找到正确的旋转方向?
我想强制默认的 android 相机仅在横向模式下拍照。我试过以下:
Intent cameraIntent=new Intent("android.media.action.IMAGE_CAPTURE");
File photo = new File(Environment.getExternalStorageDirectory().getAbsolutePath(), "Pic.jpg");
cameraIntent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(photo));
cameraIntent.putExtra(MediaStore.EXTRA_SCREEN_ORIENTATION, ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
startActivity(cameraIntent);
Run Code Online (Sandbox Code Playgroud)
但这仅适用于 2.1,不适用于以后。我只想在横向模式下保存照片图像。我不想使用任何图像处理,例如矩阵或自定义相机。
注意:我从方向固定为“纵向”的活动中调用此意图
在我的Android应用程序中,我正在从设备库加载图像.在那,我面临着关于图像方向的问题.当我从图库中加载大分辨率图像时,它们会自动旋转,然后在我的视图中显示.我尝试了有关此问题的各种解决方案但无法得到正确的解决方案 我引用了getOrientation()和这个链接.我已经尝试了两种解决方案,但无法获得理想的结果.ExifInterface返回正确的数据,但随后由于分辨率较大而不是因为相机方向而导致图像旋转,因此无效.请帮我解决这个问题.
谢谢.
android bitmap android-imageview bitmapfactory android-bitmap
所以我试图让用户从他们的照片库中选择一张图像,然后将其上传到 Firebase Storage...到目前为止,我的代码如下所示:
@Override
protected void onActivityResult(int requestCode,int resultcode, Intent data){
super.onActivityResult(requestCode,resultcode,data);
if(requestCode == REQUEST_IMAGE_CAPTURE && resultcode == RESULT_OK) {
final Uri uri = data.getData();
if (uri != null){
Bitmap bmp = null;
try {
bmp = MediaStore.Images.Media.getBitmap(getContentResolver(), uri);
} catch (IOException e){
e.printStackTrace();
}
ByteArrayOutputStream baos = new ByteArrayOutputStream();
bmp.compress(Bitmap.CompressFormat.PNG, 25, baos);
byte[] fileInBytes = baos.toByteArray();
bmp.recycle();
FirebaseAuth auth = FirebaseAuth.getInstance();
FirebaseStorage storage = FirebaseStorage.getInstance();
String imageString = "";
if(clickPhoto ==1){imageString = "Image 1"; }
else if(clickPhoto ==2){imageString = …Run Code Online (Sandbox Code Playgroud)