【问题标题】:Can't convert the relative layout with all the content to an image无法将包含所有内容的相对布局转换为图像
【发布时间】:2015-12-30 10:00:44
【问题描述】:

我有一个相对布局,它有一个滚动视图和 20 多个文本视图。 当我尝试将此布局转换为位图时,它没有发生 当我在外部存储中查看它时,它说“此文件已损坏” 在画廊中,图像显示黑色视图

这是我用来将视图转换为位图的代码

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)

【问题讨论】:

  • 您是如何调用 SaveImage 函数以及从哪里调用的?
  • 我认为您的问题已经在其他线程中得到解决,请转到此处并查看此线程link
  • @Triode 我使用这一行从同一类的 onCreate 方法调用它 - loadBitmapFromView(getApplicationContext(), v);

标签: java android android-layout bitmap


【解决方案1】:

您的 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;

【讨论】:

  • 你可以使用 (View)findViewById(R.id.your_view_id); .
  • @Triode 它不起作用!!!布局文件中是否有任何更改,例如匹配父级和填充父级或其他内容
  • @Chirag Savsani - 是的,我这样做了,但错误仍然存​​在,现在应用程序已停止
【解决方案2】:

试试这个

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(your_layout_object);

【讨论】:

  • 但是我犯了一个愚蠢的错误,我正在传递全局位图对象,这就是为什么我得到空值
猜你喜欢
  • 2023-03-18
  • 2019-12-12
  • 2014-08-17
  • 2012-04-10
  • 1970-01-01
  • 1970-01-01
  • 2017-11-22
相关资源
最近更新 更多