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 或任何您认为合适的尺寸。

希望对您有所帮助!