Java Can';t将包含所有内容的相对布局转换为图像
我有一个相对的布局,它有一个滚动视图,有20多个文本视图。 当我尝试将此布局转换为位图时,它不会发生 当我在外部存储器中查看时,它会显示“此文件已损坏” 在gallery中,图像显示黑色视图 这是我用来将视图转换为位图的代码Java Can';t将包含所有内容的相对布局转换为图像,java,android,android-layout,bitmap,Java,Android,Android Layout,Bitmap,我有一个相对的布局,它有一个滚动视图,有20多个文本视图。 当我尝试将此布局转换为位图时,它不会发生 当我在外部存储器中查看时,它会显示“此文件已损坏” 在gallery中,图像显示黑色视图 这是我用来将视图转换为位图的代码 public static Bitmap loadBitmapFromView(Context context, View v) { DisplayMetrics dm = context.getResources().getDisplayMetrics(); v.mea
public static Bitmap loadBitmapFromView(Context context, View v) {
DisplayMetrics dm = context.getResources().getDisplayMetrics();
v.measure(View.MeasureSpec.makeMeasureSpec(dm.widthPixels, View.MeasureSpec.UNSPECIFIED),
View.MeasureSpec.makeMeasureSpec(dm.heightPixels, View.MeasureSpec.UNSPECIFIED));
v.layout(0, 0, v.getMeasuredWidth(), v.getMeasuredHeight());
Bitmap bitmap = Bitmap.createBitmap(v.getMeasuredWidth(),
v.getMeasuredHeight(), Bitmap.Config.ARGB_8888);
Canvas c = new Canvas(bitmap);
v.draw(c);
return bitmap;
}
我已将相对布局的对象传递给loadBitmapFromView
及
我使用此代码将图像保存到外部存储器
private void SaveImage(Bitmap finalBitmap) {
String root = Environment.getExternalStorageDirectory().toString();
File myDir = new File(root + "/saved_images");
myDir.mkdirs();
Random generator = new Random();
int n = 100000;
n = generator.nextInt(n);
String fname = "Image-"+ n +".jpg";
File file = new File (myDir, fname);
if (file.exists ()) file.delete ();
try {
FileOutputStream out = new FileOutputStream(file);
finalBitmap.compress(Bitmap.CompressFormat.JPEG,1000,out);
out.flush();
out.close();
} catch (Exception e) {
e.printStackTrace();
}
}
这是我的日志
12-30 15:02:20.397 24825-24825/com.google.android.gms.samples.vision.barcodereader W/System.err: java.lang.NullPointerException: Attempt to invoke virtual method 'boolean android.graphics.Bitmap.compress(android.graphics.Bitmap$CompressFormat, int, java.io.OutputStream)' on a null object reference
12-30 15:02:20.397 24825-24825/com.google.android.gms.samples.vision.barcodereader W/System.err: at com.google.android.gms.samples.vision.barcodereader.ResultActivity.SaveImage(ResultActivity.java:3483)
12-30 15:02:20.397 24825-24825/com.google.android.gms.samples.vision.barcodereader W/System.err: at com.google.android.gms.samples.vision.barcodereader.ResultActivity.onCreate(ResultActivity.java:137)
您的createBitmap函数将返回null,请尝试获取位图,如下所示
final View v = mView.findViewById(R.id.your_view_id);
Bitmap b = Bitmap.createBitmap( v.getMeasuredWidth(),
v.getMeasuredHeight(), Bitmap.Config.ARGB_8888);
Canvas c = new Canvas(b);
v.layout(v.getLeft(), v.getTop(), v.getRight(), v.getBottom());
v.draw(c);
return b;
试试这个
public static Bitmap loadBitmapFromView(View v) {
Bitmap b = Bitmap.createBitmap(
v.getLayoutParams().width, v.getLayoutParams().height, Bitmap.Config.ARGB_8888);
Canvas c = new Canvas(b);
v.layout(0, 0, v.getLayoutParams().width, v.getLayoutParams().height);
v.draw(c);
return b;
}
并将其用作
位图b=loadBitmapFromView(您的布局对象) 如何调用SaveImage函数以及从何处调用?我认为您的问题已经在其他线程中得到解决。请转到这里,看看这个线程@Triode。我使用这一行从同一类的onCreate方法调用它-loadBitmapFromView(getApplicationContext(),v);您可以使用(View)findviewbyd(R.id.your_View_id)@三极管它不工作!!!布局文件中是否有任何更改,如“匹配父项”和“填充父项”或其他内容else@ChiragSavsani-是的,我这样做了,但是错误仍然存在,现在应用程序已经停止,但是我犯了一个愚蠢的错误,我传递了全局位图对象,这就是为什么我得到空值