栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

将多个TextView保存为高分辨率图像

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

将多个TextView保存为高分辨率图像

好吧,终于我找到了可行的解决方案。

这个想法:用户在800x800像素大小的图像上添加文本视图,用它做点什么,然后我需要获得相同的图像,但像素为2000x2000像素。问题是-
调整大小后,文本模糊且嘈杂。但是,我该如何截取屏幕尺寸大于屏幕的未渲染视图的屏幕截图?

我在这里使用的代码工作得很好,我得到相同的图像,相同位置的文本,相同的大小等,但没有调整大小的噪音,文本看起来清晰且不模糊。另外,此代码保存的位图比屏幕大小大得多,并且没有向用户显示。

private Bitmap makeTextLayer(int maxWidth, int maxHeight, ImageObject imageObject) {        Context c = mContext;        View v = LayoutInflater.from(c).inflate(R.layout.text_view_generator, new LinearLayout(c), false);        RelativeLayout editTexts = (RelativeLayout) v.findViewById(R.id.editTexts);        initView(v, maxWidth, maxHeight);        for (int i = 0; i < imageObject.getEditTexts().size(); ++i) { ImageObject.TextInImage textInImage = imageObject.getEditTexts().get(i); //text view in relative layout - init his size, in my case it's as big as image CustomEditText editText = new CustomEditText(c); RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.FILL_PARENT, RelativeLayout.LayoutParams.FILL_PARENT); params.addRule(RelativeLayout.CENTER_HORIZONTAL, RelativeLayout.TRUE); // don't forget to add your view to layout, this view will be saved as screenshot editTexts.addView(editText, params); editText.getLayoutParams().width = maxWidth; editText.getLayoutParams().height = maxHeight; editText.loadTextParams(textInImage); editText.loadSizeAndRotation(textInImage); // this is important, without new init - position of text will be wrong initView(v, maxWidth, maxHeight); // and here i configure position editText.loadPosition();        }        Bitmap result = getViewBitmap(v, maxWidth, maxHeight);        return result;    }    Bitmap getViewBitmap(View v, int maxWidth, int maxHeight) {        //Get the dimensions of the view so we can re-layout the view at its current size        //and create a bitmap of the same size        int width = v.getWidth();        int height = v.getHeight();        int measuredWidth = View.MeasureSpec.makeMeasureSpec(width, View.MeasureSpec.EXACTLY);        int measuredHeight = View.MeasureSpec.makeMeasureSpec(height, View.MeasureSpec.EXACTLY);        //Cause the view to re-layout        v.measure(measuredWidth, measuredHeight);        v.layout(0, 0, v.getMeasuredWidth(), v.getMeasuredHeight());        //Create a bitmap backed Canvas to draw the view into        Bitmap b = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888);        Canvas c = new Canvas(b);        //Now that the view is laid out and we have a canvas, ask the view to draw itself into the canvas        v.draw(c);        return b;    }    private void initView(View view,  int maxWidth, int maxHeight){        ViewGroup.LayoutParams vParams = view.getLayoutParams();        //If the View hasn't been attached to a layout, or had LayoutParams set        //return null, or handle this case however you want        if (vParams == null) { return;        }        int wSpec = measureSpecFromDimension(vParams.width, maxWidth);        int hSpec = measureSpecFromDimension(vParams.height, maxHeight);        view.measure(wSpec, hSpec);        int width = view.getMeasuredWidth();        int height = view.getMeasuredHeight();        //Cannot make a zero-width or zero-height bitmap        if (width == 0 || height == 0) { return;        }        view.layout(0, 0, width, height);    }    private int measureSpecFromDimension(int dimension, int maxDimension) {        switch (dimension) { case ViewGroup.LayoutParams.MATCH_PARENT:     return View.MeasureSpec.makeMeasureSpec(maxDimension, View.MeasureSpec.EXACTLY); case ViewGroup.LayoutParams.WRAP_CONTENT:     return View.MeasureSpec.makeMeasureSpec(maxDimension, View.MeasureSpec.AT_MOST); default:     return View.MeasureSpec.makeMeasureSpec(dimension, View.MeasureSpec.EXACTLY);        }    }

如果我的解决方案对您不起作用,我在阅读它们时会找到解决方案-请查看此信息。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/498575.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号