Android Studio 中处理位图的问题
Problems Handling Bitmap in Android Studio
我正在开发一个应用程序来执行许多与图像和 PDF 文件相关的任务。在其中一项功能中,我将图像转换为 PDF。我在用位图处理图像时遇到了一些问题。
1) 当我使用 phone 相机点击的图像创建 PDF 文件时,由于某种原因,它们会自动逆时针旋转 90 度。当我单击图像时,我使用了纵向模式,图像以纵向模式保存在我的 phone 的图库中。当我在 phone 的画廊中查看它时,它显示正确,但是当我在 Android Studio 的 ImageView 中加载它时,它显示了一个 90 度逆时针旋转的图像。
我正在使用下面的代码在 ImageView 中加载图像:
File file = new File(imagez.get(position));
Bitmap bitmap = BitmapFactory.decodeFile(file.getAbsolutePath());
imageView.setImageBitmap(bitmap);
这里,"imagez"是一个数组,包含用户选择的所有图片的路径,格式为String。例如,“/storage/emualted/0/pics/....”之类的。
这个问题只出现在我使用 phone 的相机点击的图像上,我从互联网或 WhatsApp 或 Facebook 下载的其他图像都可以正常工作。
2) 我的第二个问题是,当我滚动我创建的 PDF 时,那里的图像加载缓慢。 PDF 创建完成,图像应该一直存在,而不是每次我上下滚动时加载它们,就好像我正在使用适配器视图来膨胀列表视图,其中不可见的项目在移出时被销毁查看并在我向上滚动时再次加载。
我正在使用 itextpdf class 将图像转换为 PDF。
编辑:
我的问题是我希望图像以单击时的方向显示,并且在创建 PDF 时,图像应保存为原始图像(不应自动旋转)。
如果可以的话,我还有一个解决方案可以让我创建的 PDF 快速加载页面。
谢谢。
您遇到的问题是一个常见问题。我建议您尝试以下方法:
int orientation = 0;
ExifInterface exif = new ExifInterface(path_to_your_image);
orientation = exif.getAttributeInt(ExifInterface.TAG_ORIENTATION, 0);
if(orientation != 0)
{
Matrix rotateMatrix = new Matrix();
if (orientation == 6)
rotateMatrix.postRotate(90);
else if (orientation == 3)
rotateMatrix.postRotate(180);
else if (orientation == 8)
rotateMatrix.postRotate(270);
else
rotateMatrix.postRotate(0);
Bitmap newBitmap = Bitmap.createBitmap(previous_bitmap, 0, 0, previous_bitmap.getWidth(), previous_bitmap.getHeight(), rotateMatrix, false);
}
else
{
Bitmap newBitmap = Bitmap.createBitmap(previous_bitmap, 0, 0, previous_bitmap.getWidth(), previous_bitmap.getHeight);
}
//After this you can save your bitmap wherever you want
关于你的第二个问题,我猜你的图片太大了。尝试减小它们的大小或尺寸,例如 1200x1200 或任何您认为合适的尺寸。
希望对您有所帮助!
我正在开发一个应用程序来执行许多与图像和 PDF 文件相关的任务。在其中一项功能中,我将图像转换为 PDF。我在用位图处理图像时遇到了一些问题。
1) 当我使用 phone 相机点击的图像创建 PDF 文件时,由于某种原因,它们会自动逆时针旋转 90 度。当我单击图像时,我使用了纵向模式,图像以纵向模式保存在我的 phone 的图库中。当我在 phone 的画廊中查看它时,它显示正确,但是当我在 Android Studio 的 ImageView 中加载它时,它显示了一个 90 度逆时针旋转的图像。 我正在使用下面的代码在 ImageView 中加载图像:
File file = new File(imagez.get(position));
Bitmap bitmap = BitmapFactory.decodeFile(file.getAbsolutePath());
imageView.setImageBitmap(bitmap);
这里,"imagez"是一个数组,包含用户选择的所有图片的路径,格式为String。例如,“/storage/emualted/0/pics/....”之类的。 这个问题只出现在我使用 phone 的相机点击的图像上,我从互联网或 WhatsApp 或 Facebook 下载的其他图像都可以正常工作。
2) 我的第二个问题是,当我滚动我创建的 PDF 时,那里的图像加载缓慢。 PDF 创建完成,图像应该一直存在,而不是每次我上下滚动时加载它们,就好像我正在使用适配器视图来膨胀列表视图,其中不可见的项目在移出时被销毁查看并在我向上滚动时再次加载。 我正在使用 itextpdf class 将图像转换为 PDF。
编辑: 我的问题是我希望图像以单击时的方向显示,并且在创建 PDF 时,图像应保存为原始图像(不应自动旋转)。 如果可以的话,我还有一个解决方案可以让我创建的 PDF 快速加载页面。 谢谢。
您遇到的问题是一个常见问题。我建议您尝试以下方法:
int orientation = 0;
ExifInterface exif = new ExifInterface(path_to_your_image);
orientation = exif.getAttributeInt(ExifInterface.TAG_ORIENTATION, 0);
if(orientation != 0)
{
Matrix rotateMatrix = new Matrix();
if (orientation == 6)
rotateMatrix.postRotate(90);
else if (orientation == 3)
rotateMatrix.postRotate(180);
else if (orientation == 8)
rotateMatrix.postRotate(270);
else
rotateMatrix.postRotate(0);
Bitmap newBitmap = Bitmap.createBitmap(previous_bitmap, 0, 0, previous_bitmap.getWidth(), previous_bitmap.getHeight(), rotateMatrix, false);
}
else
{
Bitmap newBitmap = Bitmap.createBitmap(previous_bitmap, 0, 0, previous_bitmap.getWidth(), previous_bitmap.getHeight);
}
//After this you can save your bitmap wherever you want
关于你的第二个问题,我猜你的图片太大了。尝试减小它们的大小或尺寸,例如 1200x1200 或任何您认为合适的尺寸。
希望对您有所帮助!