android.graphics.Bitmap.Config是一个枚举类型,里面定义了位图的四种格式.
ALPHA_8,ARGB_4444,ARGB_8888都是透明的位图,也就是所字母A代表透明.
从名字中可以看出:
ALPHA_8: 一种透明度为8位的位图.
ARGB_4444: A,R,G,B,每一个参数由4bit表示,是一种16位的位图.
ARGB_8888: A,R,G,B,每一个参数由8bit来表示,是一种32位的位图.
RGB_565: R,G,B,三个参数分别占5bit,6bit,5bit,是一种三原色通道经过压缩的16位位图.
Bitmap newBitmap = Bitmap. createBitmap( imgMapWidth,imgMapHeight , Bitmap.Config.RGB_565 );
android中可以通过以上的方式来创建一BMP格式的位图,只是图片的宽和高的值太大时,会使android的VM产生内存溢出的Exception,解决的方法之一,在生成该对象时,通过设置Bitmap.Config,来压缩该位图在生成时的大小。从上面的4个属性值看来,压缩的最大值可以达到2^8。
以下方法能有效解决新建位图的大小过大的问题:
imageMap是一位图的对象,尺寸有点大,1800*1600,用上面的方法创建位图会抛出异常。
以下的方法通过判断当前的位图是否可画(可在上面画图),而决定是否复制一新对象,然后在可画图的对象上新建一画布,然后在上面画图,最后就是保存了。
//在指定的位图上添加图标
private Bitmap addMarkToImageMap(int x, int y){
//创建一个和原图同样大小的位图
//Bitmap newBitmap = Bitmap.createBitmap(imgMapWidth,imgMapHeight, Bitmap.Config.RGB_565);
Bitmap newBitmap = imageMap;
if(!newBitmap.isMutable()){
newBitmap = imageMap.copy(Bitmap.Config.RGB_565, true);
}
Canvas canvas = new Canvas(newBitmap);
canvas.drawBitmap( markImg, x, y, paint );//插入图标
canvas.save(Canvas. ALL_SAVE_FLAG);
//存储新合成的图片
canvas.restore();
return newBitmap;
}
顺便延伸一下,在图片上写字的例子就出来了:
/**
* 图片上画字
* */
private Bitmap drawTextAtBitmap(Bitmap bitmap,String text){
int x = bitmap.getWidth();
int y = bitmap.getHeight();
// 创建一个和原图同样大小的位图
Bitmap newbit = Bitmap.createBitmap(x, y, Bitmap.Config.ARGB_8888);
Canvas canvas = new Canvas(newbit);
Paint paint = new Paint();
// 在原始位置0,0插入原图
canvas.drawBitmap(bitmap, 0, 0, paint);
paint.setColor(Color.parseColor("#dedbde"));
paint.setTextSize(20);
// 在原图指定位置写上字
canvas.drawText(text, 53 , 30, paint);
canvas.save(Canvas.ALL_SAVE_FLAG);
// 存储
canvas.restore();
return newbit;
}
分享到:
相关推荐
仿Mac QQ音乐顶部banner 图片叠加轮播效果,有需要的可以下载看看!
android图片叠加,两种方法。canvas和LayerDrawable
主要介绍了Android实现图片叠加效果的两种方法,结合实例形式分析了Android实现图片叠加效果的两种操作方法与相关注意事项,需要的朋友可以参考下
android-image-slide-panel图片照片墙的加载图片的时候一张一张叠加 和加载完成后切换每一张的滑动特效,自定义ImageSlidePanel,按照初叶的使用习惯, 每一页应该是一个模板,所以此处命名时使用了Template关键字
Android拖动图片移动、图层叠加并保存至本地,内含效果图。
Android进阶篇之RoundProgress(圆形进度条)使用两张图片叠加实现
本篇文章主要介绍了Android实现图片叠加功能的代码,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
适用于ESC/POS兼容指令集 的 android 蓝牙打印图片
android仿美图秀秀 图片叠加、拖动、旋转等操作。
本文实例讲述了Android编程实现图片背景渐变切换与图层叠加效果。分享给大家供大家参考,具体如下: 本例要实现的目的: 1.图片背景渐变的切换,例如渐变的从红色切换成绿色。 2.代码中进行图层叠加,即把多个...
利用Canvas 的save,translate,rotate 相关方法,可以比较快速的实现图片旋转,且中心点不偏移。避免了使用Bitmap中setRotate中旋转覆盖且出现黑边的问题。可以直接下载使用自定义控件就可以了。
Android使用opencv识别两张图片的相同区域,去重拼接,可以拼接多张图片
android图片堆叠效果实现,实现任意小角度堆叠显示,可用于图片相册缩略图
通过jni实现Android的图片的毛玻璃效果。
本文实例讲述了Android编程实现支持拖动改变位置的图片中叠加文字功能。分享给大家供大家参考,具体如下: 之所以做了这么一个Demo,是因为最近项目中有一个奇葩的需求:用户拍摄照片后,分享到微信的同时添加备注,...
android画廊效果,中间图片变大android画廊效果,中间图片变大
android图片层叠效果,图片一层一层的叠加,有种书本的感觉。
类似GPUImage的滤镜组,支持多个滤镜叠加,滤镜顺序可在渲染到球体之前或之后 支持原视频渲染(铺满屏幕/剪切/自适应) 支持播放全景图片 视频实时截图 在线视频播放(你可能需要自行处理多种格式的解码问题) 支持...
6. android 图像处理系列之六--给图片添加边框(下)-图片叠加...................................................................21 7. android 图像处理系列之七--图片涂鸦,水印-图片叠加..............