如何解决画布:试图绘制太大120422400 字节位图
您好,我正在尝试将图像从我的应用程序上传到 Firebase,但是当从图库中选择图像但未在图像视图中显示并且该应用程序崩溃后
错误画布:试图绘制过大(120422400 字节)的位图。
只有少数图像具有非常高的分辨率
我曾尝试将硬件加速设为 false,但对我不起作用
还有任何关于如何最小化上传到数据库最大图像分辨率的解决方案应该是 4k
如果您想查看适配器类的代码,请告诉我我会 更新我的问题
这是我的代码
Upload_Fragment.xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@color/black">
<TextView
android:id="@+id/done_button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/done"
android:layout_alignParentTop="true"
android:textColor="@color/white"
android:elevation="10dp"
android:textSize="15sp"
android:textStyle="bold|normal"
android:layout_alignParentEnd="true"
android:layout_marginEnd="10dp"
android:layout_marginTop="10dp"/>
<ImageView
android:id="@+id/upload_image_view"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_marginTop="5dp"
android:contentDescription="@string/todo"
android:layout_below="@+id/done_button"
android:layout_above="@+id/upload_image_button"/>
<Button
android:id="@+id/upload_image_button"
android:layout_width="wrap_content"
android:layout_height="60dp"
android:backgroundTint="@color/grey"
android:text="@string/gallery"
android:textColor="@color/white"
android:layout_centerInParent="true"
android:layout_alignParentBottom="true"/>
</RelativeLayout>
Upload_Fragment.java
public class Upload_Fragment extends Fragment {
private static final int PICK_IMAGE_REQUEST = 10;
Button chooseImageButton;
TextView doneImageButtonButton;
private ImageView uploadImageView;
private Uri mImageUri;
private StorageReference storageReference;
private DatabaseReference databaseReference;
private StorageTask mUploadTask;
@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater,@Nullable ViewGroup container,@Nullable Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_upload,container,false);
requireActivity().setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
chooseImageButton = view.findViewById(R.id.upload_image_button);
doneImageButtonButton = view.findViewById(R.id.done_button);
uploadImageView = view.findViewById(R.id.upload_image_view);
storageReference = FirebaseStorage.getInstance().getReference("uploads");
databaseReference = FirebaseDatabase.getInstance().getReference("uploads");
doneImageButtonButton.setVisibility(View.INVISIBLE);
chooseImageButton.setOnClickListener(v -> openFileChooser());
doneImageButtonButton.setOnClickListener(v -> {
if (mUploadTask != null && mUploadTask.isInProgress()) {
Toast.makeText(getActivity(),"Upload in Progress",Toast.LENGTH_SHORT).show();
} else {
uploadToFirebase(mImageUri);
}
});
return view;
}
private void openFileChooser() {
Intent intent = new Intent();
intent.setType("image/*");
intent.setAction(Intent.ACTION_GET_CONTENT);
startActivityForResult(intent,PICK_IMAGE_REQUEST);
}
@Override
public void onActivityResult(int requestCode,int resultCode,@Nullable Intent data) {
super.onActivityResult(requestCode,resultCode,data);
if (requestCode == PICK_IMAGE_REQUEST && resultCode == RESULT_OK
&& data != null && data.getData() != null) {
mImageUri = data.getData();
doneImageButtonButton.setVisibility(View.VISIBLE);
Picasso.get().load(mImageUri).into(uploadImageView);
}
}
private String getFileExtension(Uri uri) {
ContentResolver contentResolver = requireActivity().getContentResolver();
MimeTypeMap mime = MimeTypeMap.getSingleton();
return mime.getExtensionFromMimeType(contentResolver.getType(uri));
}
private void uploadToFirebase(Uri mImageUri) {
if (mImageUri != null) {
final ProgressDialog progressDialog = new ProgressDialog(getActivity());
progressDialog.setTitle("Uploading...");
progressDialog.show();
StorageReference reference = storageReference.child(System.currentTimeMillis()
+ "." + getFileExtension(mImageUri));
reference.putFile(mImageUri)
.addOnSuccessListener(taskSnapshot -> {
progressDialog.dismiss();
Toast.makeText(getActivity(),"Saved Succesfully",Toast.LENGTH_SHORT).show();
reference.getDownloadUrl()
.addOnSuccessListener(uri -> {
Upload upload = new Upload(uri.toString());
String uploadId = databaseReference.push().getKey();
databaseReference.child(uploadId).setValue(upload);
});
})
.addOnProgressListener(snapshot -> {
double progress = (100.0 * snapshot.getBytesTransferred() / snapshot
.getTotalByteCount());
progressDialog.setMessage("Uploaded " + (int) progress + "%");
})
.addOnFailureListener(e -> {
progressDialog.dismiss();
Toast.makeText(getActivity(),"Error Ocurred" + e.getMessage(),Toast.LENGTH_SHORT).show();
});
}
}
}
解决方法
这意味着您的图像太大而无法在画布上绘制。
解决方案: 使用任何在线工具(例如 Tiny PNG
)压缩您的图像版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。