Java 保存图像时出错视图宽度和高度必须为>;0
我想将imageView保存到sd卡中,但当我尝试从imageView获取位图时,出现以下异常(有时不总是)。谁能帮帮我吗?提前谢谢Java 保存图像时出错视图宽度和高度必须为>;0,java,android,bitmap,Java,Android,Bitmap,我想将imageView保存到sd卡中,但当我尝试从imageView获取位图时,出现以下异常(有时不总是)。谁能帮帮我吗?提前谢谢 Caused by: java.lang.IllegalArgumentException: width and height must be > 0 at android.graphics.Bitmap.createBitmap(Bitmap.java:922) 我认为例外是因为d.getIntrinsicWidth(),d.getIntrinsicH
Caused by: java.lang.IllegalArgumentException: width and height must be > 0 at android.graphics.Bitmap.createBitmap(Bitmap.java:922)
我认为例外是因为
d.getIntrinsicWidth(),d.getIntrinsicHeight()
第行bitmap=bitmap.createBitmap(d.getIntrinsicWidth(),d.getIntrinsicHeight(),bitmap.Config.ARGB_8888)代码>
根据drawable.getIntrinsicWidth()
返回底层可绘制对象的内部宽度。如果没有固有宽度(例如纯色),则返回-1。因此,请确保将大于1的值传递给Bitmap.createBitmap()
method此错误是因为d.getIntrinsicWidth(),d.getIntrinsicHeight()
返回0请尝试输入一些常量值,然后像100一样进行检查。您在这里想做什么?Drawable d=mImageView.getDrawable();bitmap=bitmap.createBitmap(d.getIntrinsicWidth()、d.getIntrinsicHeight()、bitmap.Config.ARGB_8888);画布=新画布(位图);d、 绘画(画布);顺便说一句,还有一个问题。。。你说有时发生是什么意思。。它是为不同的图像。。或者对于同一个图像,有时会发生这种情况?我使用3台设备测试了该应用程序,效果很好,但它发生在用户设备上。我无法重复它来查看测试设备上的问题。我使用以下代码设置imageView,我使用transparentDrawable来解决毕加索包装内容问题transparentDrawable.setBounds(新Rect(0,0,1000,1000));毕加索.with(mContext).加载(((FBPhotoCard)mImageCards.get(position)).getThumbnail()).占位符(可透明绘制).noFade().到(holder.imageView)中;
public static class SaveImageToSD extends AsyncTask<String, Void, String> {
Context context;
ImageView mImageView;
ProgressDialog progressDialog;
public SaveImageToSD(Context context, ImageView iv, String name) {
this.context = context;
this.mImageView = iv;
}
@Override
protected void onPreExecute() {
progressDialog = ProgressDialog.show(context, "", context.getResources().getString(R.string.please_wait), true);
}
@Override
protected void onPostExecute(String result) {
}
@Override
protected String doInBackground(String... x) {
File projectFolder = new File(Environment.getExternalStorageDirectory() + File.separator + Settings.projectFolder + File.separator);
boolean folderCreateSuccess = true;
if (!projectFolder.exists()) {
folderCreateSuccess = projectFolder.mkdir();
}
if (folderCreateSuccess) {
Bitmap bitmap;
// Exception in if statement
if (mImageView.getDrawable() instanceof BitmapDrawable) {
bitmap = ((BitmapDrawable) mImageView.getDrawable()).getBitmap();
} else {
Drawable d = mImageView.getDrawable();
bitmap = Bitmap.createBitmap(d.getIntrinsicWidth(), d.getIntrinsicHeight(), Bitmap.Config.ARGB_8888);
Canvas canvas = new Canvas(bitmap);
d.draw(canvas);
}
File image = new File(projectFolder, "GE_" + System.currentTimeMillis() + ".jpg");
boolean success = false;
// Encode the file as a PNG image.
FileOutputStream outStream;
try {
outStream = new FileOutputStream(image);
bitmap.compress(Bitmap.CompressFormat.PNG, 100, outStream);
/* 100 to keep full quality of the image */
outStream.flush();
outStream.close();
ContentValues values = new ContentValues();
values.put(MediaStore.Images.Media.TITLE, "title");
values.put(MediaStore.Images.Media.DESCRIPTION, "description");
values.put(MediaStore.Images.Media.DATE_TAKEN, System.currentTimeMillis());
values.put(MediaStore.Images.ImageColumns.BUCKET_ID, image.toString().toLowerCase(Locale.US).hashCode());
values.put(MediaStore.Images.ImageColumns.BUCKET_DISPLAY_NAME, image.getName().toLowerCase(Locale.US));
values.put("_data", image.getAbsolutePath());
ContentResolver cr = context.getContentResolver();
cr.insert(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, values);
success = true;
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
}
progressDialog.dismiss();
if (success) {
((ActionBarActivity)context).runOnUiThread(new Runnable() {
public void run() {
Toast.makeText(context, context.getResources().getString(R.string.image_successfully_saved), Toast.LENGTH_SHORT).show();
}
});
} else {
((ActionBarActivity)context).runOnUiThread(new Runnable() {
public void run() {
Toast.makeText(context, context.getResources().getString(R.string.image_successfully_saved), Toast.LENGTH_SHORT).show();
}
});
}
} else {
Log.i("Create Folder", "Error during create folder");
}
return "";
}
}
transparentDrawable.setBounds(new Rect(0, 0, 1000, 1000));
Picasso.with(mContext).load(((FBPhotoCard) mImageCards.get(position)).getThumbnail()).placeholder(transparentDrawable).noFade().into(holder.imageView);