如何将文字怎样写写到Bitmap的中间

Android把文字写到图片上生成图片+文字的新图片 - 博客频道 - CSDN.NET
wozuihaole的博客
&&&&& 我们项目最近需要微信分享员工二维码功能,二维码图片直接使用zxing就可以生成,但是生成之后只有一个图片,而我们需求的要求是这样的:
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
&&&& 没错就是二维码下边有一行提示文字,你可能会想直接imageview下边放个textview就行了,没错这样在你的APP里显示效果确实是达到了,但是还要在二维码分享到朋友圈或者其他朋友时也是这个样子的啊,所以没办法,只能是得到二维码图片时再重新创建一张图片把文字也画上来,分享的时候就分享新图片就可以了,这个实现起来也很简单的,下面就来说说怎么画。
&&&&&&&& 1.获取到二维码图片的高度bitmapHeight宽度bitmapWidth;
&&&&&&&& 2.根据文字大小计算出二维码宽度的一行可以放多少个文字count,然后根据文字长度和count计算出需要几行来显示文字;
&&&&&&&& 3.之后新建一个Bitmap对象,它的宽度就是图片宽度,高度是图片高度+配文与图片间的间距+文字大小*文字行数+文字间的行间距*文字行数;
&&&&&&& 4.以Bitmap构建画布对象,先将二维码画上来,然后在二维码下边画出以配文与图片间的间距+文字大小*文字行数+文字间的行间距*文字行数为高度的一个白底矩形,用来盛放文字(这里说一下为什么要画这个矩形,是因为我们的项目要求可以保存这张图片,而保存到相册后,手机相册背景是黑色的,我们不画这个白色矩形背景的话,文字默认背景就是透明的,而文字如果设置成黑色,这时候就会感觉你的图片只有二维码没有下边的配文了,不符合要求,也不美观);
&&&&&& 5.用一个循环来画出文字,返回新的图片。
思路就是这些了,我觉得我说的很细了,下边就看看代码吧,我写注释都很详细,就不再另外介绍了:
主要变量含义
/**传递进来的源图片*/
private Bitmap source;
/**图片的配文*/
private String text;
/**图片加上配文后生成的新图片*/
private Bitmap newBitmap;
/**配文的颜色*/
private int textColor = Color.BLACK;
/**配文的字体大小*/
private float textSize = 16;
/**图片的宽度*/
private int bitmapWidth;
/**图片的高度*/
private int bitmapHeight;
/**画图片的画笔*/
private Paint bitmapPaint;
/**画文字的画笔*/
private Paint textPaint;
/**配文与图片间的距离*/
private float padding = 20;
/**配文行与行之间的距离*/
private float linePadding = 5;
bitmapWidth = source.getWidth();
bitmapHeight = source.getHeight();
//一行可以显示文字的个数
int lineTextCount = (int) ((source.getWidth()-50)/textSize);
//一共要把文字分为几行
int line = (int) Math.ceil(Double.valueOf(text.length())/Double.valueOf(lineTextCount));
//新创建一个新图片比源图片多出一部分,后续用来与文字叠加用
newBitmap = Bitmap.createBitmap(bitmapWidth,
(int) (bitmapHeight+padding+textSize*line+linePadding*line), Bitmap.Config.ARGB_8888);
Canvas canvas = new Canvas(newBitmap);
//把图片画上来
canvas.drawBitmap(source,0,0,bitmapPaint);
//在图片下边画一个白色矩形块用来放文字,防止文字是透明背景,在有些情况下保存到本地后看不出来
textPaint.setColor(Color.WHITE);
canvas.drawRect(0,source.getHeight(),source.getWidth(),
source.getHeight()+padding+textSize*line+linePadding*line,textPaint);
//把文字画上来
textPaint.setColor(textColor);
textPaint.setTextSize(textSize);
Rect bounds = new Rect();
//开启循环直到画完所有行的文字
for (int i=0; i&line; i++) {
if (i == line-1) {//如果是最后一行,则结束位置就是文字的长度,别下标越界哦
s = text.substring(i*lineTextCount, text.length());
} else {//不是最后一行
s = text.substring(i*lineTextCount, (i+1)*lineTextCount);
//获取文字的字宽高以便把文字与图片中心对齐
textPaint.getTextBounds(s,0,s.length(),bounds);
//画文字的时候高度需要注意文字大小以及文字行间距
canvas.drawText(s,source.getWidth()/2-bounds.width()/2,
source.getHeight()+padding+i*textSize+i*linePadding+bounds.height()/2,textPaint);
canvas.save(Canvas.ALL_SAVE_FLAG);
canvas.restore();
wozuihaole
排名:千里之外Bitmap上写文字
Bitmap上写文字
发布时间: 1:05:27
编辑:www.fx114.net
本篇文章主要介绍了"Bitmap上写文字",主要涉及到Bitmap上写文字方面的内容,对于Bitmap上写文字感兴趣的同学可以参考一下。
public Bitmap drawTextToBitmap(Context mContext,
int resourceId,
String mText) {
Resources resources = mContext.getResources();
float scale = resources.getDisplayMetrics().
Bitmap bitmap = BitmapFactory.decodeResource(resources, resourceId);
android.graphics.Bitmap.Config bitmapConfig =
bitmap.getConfig();
// set default bitmap config if none
if(bitmapConfig == null) {
bitmapConfig = android.graphics.Bitmap.Config.ARGB_8888;
// resource bitmaps are imutable,
// so we need to convert it to mutable one
bitmap = bitmap.copy(bitmapConfig, true);
Canvas canvas = new Canvas(bitmap);
// new antialised Paint
Paint paint = new Paint(Paint.ANTI_ALIAS_FLAG);
// text color - #3D3D3D
paint.setColor(Color.rgb(110,110, 110));
// text size in pixels
paint.setTextSize((int) (12 * scale));
// text shadow
paint.setShadowLayer(1f, 0f, 1f, Color.DKGRAY);
// draw text to the Canvas center
Rect bounds = new Rect();
paint.getTextBounds(mText, 0, mText.length(), bounds);
int x = (bitmap.getWidth() - bounds.width())/6;
int y = (bitmap.getHeight() + bounds.height())/5;
canvas.drawText(mText, x * scale, y * scale, paint);
} catch (Exception e) {
// TODO: handle exception
一、不得利用本站危害国家安全、泄露国家秘密,不得侵犯国家社会集体的和公民的合法权益,不得利用本站制作、复制和传播不法有害信息!
二、互相尊重,对自己的言论和行为负责。
本文标题:
本页链接:怎么将文字以bitmap形式保存到内存呢 - VC/MFC当前位置:& &&&怎么将文字以bitmap形式保存到内存呢怎么将文字以bitmap形式保存到内存呢&&网友分享于:&&浏览:59次如何将文字以bitmap形式保存到内存呢?我想将文字以bitmap形式保存到内存。有什么函数能做到呢?最好是最高效的方法------解决方案--------------------写一个
------解决方案--------------------DrawText或TextOut绘制到DC上 再把DC报错成BMP
------解决方案--------------------基本套路就是:hdc = CreateCompatibleDC(0);hbitmap = CreateCompatibleBitmap(...);SelectObject(hdc, hbitmap);TextOut(hdc, ...);之后不要忘记DeleteDC(hdc); DeleteObject(hbitmap);
12345678910
12345678910
12345678910 上一篇:下一篇:文章评论相关解决方案 12345678910 Copyright & &&版权所有问题:求助!!!!bitmap上面写字
&&&&@Override
&&&&public&void&onCreate(Bundle&savedInstanceState)&{
&&&&&&&&super.onCreate(savedInstanceState);
&&&&&&&&setContentView(R.layout.main);
&&&&&&&&ImageView&imageView&=&(ImageView)findViewById(R.id.myimg);
&&&&&&&&Bitmap&bmp&=&BitmapFactory.decodeResource(this.getResources(),&R.drawable.background);
&&&&&&&&Bitmap&newb&=&Bitmap.createBitmap(320,480,Config.ARGB_8888);
&&&&&&&&Canvas&canvasTmp&=&new&Canvas(newb);
&&&&&&&&canvasTmp.drawColor(Color.TRANSPARENT);
&&&&&&&&Paint&p&=&new&Paint();
&&&&&&&&Typeface&font&=&Typeface.create("宋体",&Typeface.BOLD);
&&&&&&&&p.setColor(Color.RED);
&&&&&&&&p.setTypeface(font);
&&&&&&&&p.setTextSize(16);
&&&&&&&&canvasTmp.drawBitmap(bmp,&0,0,p);
&&&&&&&&canvasTmp.drawText("文字",&0,&0,&p);
&&&&&&&&canvasTmp.save(Canvas.ALL_SAVE_FLAG);
&&&&&&&&imageView.setImageBitmap(newb);
&&&&&&&&canvasTmp.restore();
在一张图片上写字,网上找的代码是这样的.但是坐标都为(0,0)时.图片把文字挡住了,就是看不到文字了&解决方案1:
&坐标不对吧!改改就行了!
解决方案2:
你先画图&再画字&&这样就可以覆盖在图上面了!
解决方案3:
同意楼上的,建议把canvasTmp.drawText("文字",&0,&0,&p);中的,0,0改成其他值试试,调整下x和y看看效果。
解决方案4:
感觉文字的坐标y值,指的是文本的基线与容器顶端的距离;&而不是想当然的文本顶端与容器顶端的距离...
以上介绍了“求助!!!!bitmap上面写字”的问题解答,希望对有需要的网友有所帮助。
本文网址链接:/itwd/809607.html
上一篇: 下一篇:

我要回帖

更多关于 文字怎样写 的文章

 

随机推荐