`
superheizai
  • 浏览: 65573 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

多层图片合成

 
阅读更多
这个来自于这个大牛:
http://www.iteye.com/topic/484289,以下是学习的内容:

项目中遇到了一个图片合成的问题,搞很长时间也没搞定,最后使用Canvas和Bitmap解决了画图的问题。

Canvas是一个画布,你可以建立一个空白的画布,就直接new一个Canvas对象,不需要参数。
也可以先使用BitmapFactory创建一个Bitmap对象,作为新的Canvas对象的参数,也就是说这个画布不是空白的,
如果你想保存图片的话,最好是Bitmap是一个新的,而不是从某个文件中读入进来的,或者是Drawable对象。

然后使用Canvas画第一张图上去,在画第二张图上去,最后使用Canvas.save(int flag)的方法进行保存,注意save方法里面的参数可以保存单个图层,
如果是保存全部图层的 话使用 save( Canvas.ALL_SAVE_FLAG )。

最后所有的信息都会保存在第一个创建的Bitmap中。代码如下:
Java代码
/**
    * create the bitmap from a byte array
    *
    * @param src the bitmap object you want proecss
    * @param watermark the water mark above the src
    * @return return a bitmap object ,if paramter's length is 0,return null
    */ 
   private Bitmap createBitmap( Bitmap src, Bitmap watermark ) 
   { 
       String tag = "createBitmap"; 
       Log.d( tag, "create a new bitmap" ); 
       if( src == null ) 
       { 
           return null; 
       } 
 
       int w = src.getWidth(); 
       int h = src.getHeight(); 
       int ww = watermark.getWidth(); 
       int wh = watermark.getHeight(); 
       //create the new blank bitmap 
       Bitmap newb = Bitmap.createBitmap( w, h, Config.ARGB_8888 );//创建一个新的和SRC长度宽度一样的位图 
       Canvas cv = new Canvas( newb ); 
       //draw src into 
       cv.drawBitmap( src, 0, 0, null );//在 0,0坐标开始画入src 
       //draw watermark into 
       cv.drawBitmap( watermark, w - ww + 5, h - wh + 5, null );//在src的右下角画入水印 
       //save all clip 
       cv.save( Canvas.ALL_SAVE_FLAG );//保存 
       //store 
       cv.restore();//存储 
       return newb; 
   } 

对图片进行缩小的方法:
Java代码
/**
    * lessen the bitmap
    *
    * @param src bitmap
    * @param destWidth the dest bitmap width
    * @param destHeigth
    * @return new bitmap if successful ,oherwise null
    */ 
   private Bitmap lessenBitmap( Bitmap src, int destWidth, int destHeigth ) 
   { 
       String tag = "lessenBitmap"; 
       if( src == null ) 
       { 
           return null; 
       } 
       int w = src.getWidth();//源文件的大小 
       int h = src.getHeight(); 
       // calculate the scale - in this case = 0.4f 
       float scaleWidth = ( ( float ) destWidth ) / w;//宽度缩小比例 
       float scaleHeight = ( ( float ) destHeigth ) / h;//高度缩小比例 
       Log.d( tag, "bitmap width is :" + w ); 
       Log.d( tag, "bitmap height is :" + h ); 
       Log.d( tag, "new width is :" + destWidth ); 
       Log.d( tag, "new height is :" + destHeigth ); 
       Log.d( tag, "scale width is  :" + scaleWidth ); 
       Log.d( tag, "scale height is  :" + scaleHeight ); 
       Matrix m = new Matrix();//矩阵 
       m.postScale( scaleWidth, scaleHeight );//设置矩阵比例 
       Bitmap resizedBitmap = Bitmap.createBitmap( src, 0, 0, w, h, m, true );//直接按照矩阵的比例把源文件画入进行 
       return resizedBitmap; 
   } 

分享到:
评论

相关推荐

    照片合成3D模型

    通过输入不同角度的照片,返回三维模型顶点数据。

    tifsetu 图片合成

    在IT领域,图片处理是一项常见的任务,而"tifsetup 图片合成"则涉及到将多张JPG格式的图片合并成一个TIF(Tagged Image File Format)格式的文件。TIF是一种广泛使用的图像文件格式,尤其在专业图像处理、印刷和扫描...

    VGG的自然合成图片的python代码

    在“VGG的自然合成图片的python代码”项目中,我们可以理解为这是使用Python编程语言实现的一个工具,用于对自然图片进行处理,可能包括增强、变换或生成新的合成图像。这些操作通常在机器学习和计算机视觉研究中...

    视频合成工具

    6. **多层叠加**:支持多层视频、图片和图形同时显示,允许用户自由控制各层的透明度和位置,创建层次丰富的复合图像。 7. **键控技术**:如绿幕或蓝幕技术,通过提取特定颜色背景并替换为其他图像或视频,实现虚拟...

    一张图片合成动画.pdf

    【深度学习】是一种人工智能领域的核心技术,它通过模拟人脑神经网络的工作原理,构建多层的复杂模型,以解决复杂的计算问题。在深度学习中,神经网络由大量的节点(也称为神经元)组成,这些节点被分层组织,形成了...

    迷你型图像合成软件.

    2. 层次编辑:软件可能会提供多层编辑功能,让用户可以在不同层上独立操作图像,调整每一层的透明度、混合模式,实现更复杂的合成效果。 3. 蒙版与遮罩:用于精确地选择和隐藏图像的特定部分,使合成更为自然,避免...

    图片合并拆解

    TIFF是一种非常通用的位图图像格式,尤其在专业图形、扫描和印刷领域广泛应用,因为它支持多层、透明度以及多种压缩方法。在处理大量TIFF图片时,有时我们需要将它们合并成一个文件,或者将一个大的TIFF文件拆解为多...

    Kontakt音源 图片

    作为一个强大的虚拟乐器,Kontakt提供了丰富的音色库,包含各种乐器声音,如钢琴、吉他、弦乐、打击乐、合成器声音等,甚至可以加载自定义的采样内容,满足音乐人对于独特音色的需求。 Kontakt音源,简单来说,就是...

    图片修改器gimp

    2. 层操作:与Photoshop类似,GIMP支持多层编辑,可以单独处理图像的不同部分,实现更复杂的图像合成效果。 3. 滤镜与特效:GIMP内置了丰富的滤镜库,包括模糊、锐化、扭曲、光照效果等多种特效,可以轻松实现艺术...

    c#景深融合软件 EDF 景深融合 EDF Depth of Field

    附件为C#编写的景深融合软件,调用opencvSharp,附件非源码,需要源码私聊,软件界面见链接:https://blog.csdn.net/wanghuannihao1992/article/details/116053148

    素材图片.zip

    此外,TIFF还支持Alpha通道,用于保存透明度信息,使得图像合成和遮罩操作更为便捷。 其次,我们来谈谈图像处理。打开并编辑3.tif文件可能需要用到如Adobe Photoshop这样的专业图像编辑软件。在这里,你可以进行...

    低质量图片转高质量.rar

    这些模型通过多层卷积和反卷积操作来学习图像的上下文信息和细节恢复。 3. 训练与优化:使用训练数据集对模型进行训练,调整网络参数以最小化图像的重建误差,比如均方误差。同时,为了获得更自然的图像,可能会...

    基于卷积神经网络的图像风格迁移实现与开发.pdf

    对于给定的与输出有关的输入图片的局部大小,采用连续多层的小卷积核效果强于采用单一大的卷积核。在VGG中,使用3个3×3卷积核来代替7×7卷积核,使用2个3×3卷积核来代替5×5卷积核,这样做可以保证具有相同的与...

    基于Python环境下的图片分层软件设计.zip

    这样的工作流程对于复杂的图像合成和编辑非常有效。 在Python环境下实现图片分层,我们需要掌握以下几个关键知识点: 1. **PIL(Python Imaging Library)**:PIL是Python中最常用的图像处理库,它可以打开、操作...

    ps教程实例

    - 合成火焰字效果可能需要多层叠加,每一层都可进行独立调整,如色调、亮度和对比度。 - 使用“调整图层”可以非破坏性地对底层图像进行色彩和亮度调整。 - 对于最终效果,可能要进行细节优化,比如边缘锐化,以...

    GraphicsMagick图片截取软件全套及相应的demo.rar

    5. 层次操作:GraphicsMagick支持多层图像操作,可以进行合成、混合、遮罩等复杂的图像处理任务。 6. 动态图像处理:不仅限于静态图像,GraphicsMagick同样可以处理GIF和其他动态图像格式。 7. 命令行接口:其强大...

    比较经典的免安装的图片处理工具gim安装文件

    1. **多层编辑**:GIMP支持多层编辑,允许用户独立处理每个图层,从而实现更复杂的图像合成和编辑。 2. **广泛的工具集**:GIMP提供了丰富的绘画工具,如画笔、铅笔、橡皮擦、克隆工具等,以及选择工具、变换工具、...

    图像透明显示原理及其实现.pdf

    - **多层图像合成**:在实际应用中,经常需要将多个图像层进行叠加。每一层都可能包含透明区域。此时,需要按照从底层到顶层的顺序依次对各层进行合成处理。 - **性能优化**:在处理大量图像数据时,性能优化至关...

    photoshop非主流教程

    8. **创意合成**:非主流图片往往包含元素的拼接和合成,使用“自由变换”和“克隆图章工具”可以将不同图像巧妙地融合在一起,形成独特的视觉效果。 9. **色彩溢出**:通过“色彩溢出”或“色彩范围”功能,你可以...

    基于AE软件的民族风设计任务书.doc

    After Effects,简称AE,是Adobe公司的一款专业特效合成软件,它整合了多层图像控制、高级特效和动画功能,使得视频合成效果达到极致。 在设计过程中,学生需要展现出创新思维,确保宣传片的新颖性和吸引力。这包括...

Global site tag (gtag.js) - Google Analytics