Android之libgdx裁剪图片成圆角矩形

原创 2016年06月09日 16:07:12

处理前:
处理前
处理后:
处理后

原理:利用原图和一个矩形mask,针对每个像素进行了积运算。

(1)创建掩码。首先我们先创建一个圆角矩形内部颜色为空。我们可以将圆角矩形看作是由两个矩形和四个圆组成。
圆角矩形

//创建rouned rectangle
public static Pixmap getPixmapRoundedRectangle(int width, int height, int radius, Color  color) {

     Pixmap pixmap = new Pixmap(width, height, Pixmap.Format.RGBA8888);
     pixmap.setColor(color);

     // 横着的矩形
     pixmap.fillRectangle(0, radius, pixmap.getWidth(), pixmap.getHeight()-2*radius);
    // 垂直矩形
     pixmap.fillRectangle(radius, 0, pixmap.getWidth() - 2*radius, pixmap.getHeight());
    // 左上 circle
     pixmap.fillCircle(radius, radius, radius);  
    // 左下 circle
    pixmap.fillCircle(radius, pixmap.getHeight()-radius, radius);
    // 右上 circle
     pixmap.fillCircle(pixmap.getWidth()-radius, radius, radius);
    // 右下 circle
     pixmap.fillCircle(pixmap.getWidth()-radius, pixmap.getHeight()-radius, radius);
     return pixmap;
    }

(2)裁剪。原图结合掩码进行裁剪

public static void pixmapMask(Pixmap pixmap, Pixmap mask, Pixmap result, boolean invertMaskAlpha){
    int pixmapWidth = pixmap.getWidth();
    int pixmapHeight = pixmap.getHeight();
    Color pixelColor = new Color();
    Color maskPixelColor = new Color();

    Pixmap.Blending blending = Pixmap.getBlending();
    Pixmap.setBlending(Blending.None);
    for (int x=0; x<pixmapWidth; x++){
        for (int y=0; y<pixmapHeight; y++){
            Color.rgba8888ToColor(pixelColor, pixmap.getPixel(x, y));                           // 获取原图像素颜色
            Color.rgba8888ToColor(maskPixelColor, mask.getPixel(x, y));                         // 获取掩码像素颜色

            maskPixelColor.a = (invertMaskAlpha) ? 1.0f-maskPixelColor.a : maskPixelColor.a;    // 如果转换掩码
            pixelColor.a = pixelColor.a * maskPixelColor.a;                                     // 颜色吸相乘
            result.setColor(pixelColor);
            result.drawPixel(x, y);
        }
    }
    Pixmap.setBlending(blending);
}

(3) 综合代码

public static Pixmap createRoundedPixmap(){
    Pixmap  pixmap = new Pixmap(Gdx.files.internal("p2.jpg"));//原图
    Pixmap   mask =  getPixmapRoundedRectangle(pixmap.getWidth(), pixmap.getWidth(),12,Color.WHITE);//掩码
    Pixmap  result=new Pixmap(pixmap.getWidth(), pixmap.getHeight(), Pixmap.Format.RGBA8888);//保存结果
    pixmapMask(pixmap, mask, result, false);
    return result;
}

参考

  1. 画一个圆角矩形pixmap
  2. libgdx修改图片资源成圆角矩形
版权声明:本文为博主原创文章,未经博主允许不得转载。

Libgdx 圆形进度条的实现

Libgdx 圆形进度条的实现
  • wuhaishengxxx
  • wuhaishengxxx
  • 2015年06月25日 23:32
  • 940

Android之libgdx裁剪图片成圆角矩形

Android libgdx 图片 mask 圆角矩形
  • hujinglovekmg
  • hujinglovekmg
  • 2016年06月09日 16:07
  • 595

用pygame画一个圆

import sys, random, math, pygame from pygame.locals import * from datetime import datetime, date, ti...
  • themagickeyjianan
  • themagickeyjianan
  • 2015年06月11日 16:45
  • 874

Libgdx之Group

Libgdx之GroupGroup可以说Libgdx中非常好用的一个组件,可以把其余的Actor封装在一起,然后赋予同样的Actions或者Position等。 Group的坐标是从左下角开始的,如...
  • zqiang_55
  • zqiang_55
  • 2016年06月06日 22:07
  • 4386

2.9.3_arcTo()扩展画圆角矩形

2.9.3_arcTo()扩展画圆角矩形 arcTo()画圆角矩形 body{ ...
  • jun_sun_shine
  • jun_sun_shine
  • 2017年05月02日 10:35
  • 114

ios: 画半个椭圆

一、画椭圆 椭圆坐标示意图 //定义椭圆的左上角位置,高度,宽度 GRect ellipse = CGRectMake(0, 0, 100, 80); //设置填充颜色 CGContextSe...
  • tianxiawuzhei
  • tianxiawuzhei
  • 2016年03月29日 14:28
  • 2496

Android源码大放送(实战开发必备)

Android源码大放送(实战开发必备)文件夹 PATH 列表│  javaapk.com文件列表生成工具.bat│  使用说明.txt│  免费下载更多源码.url│  目录列表.txt│  ├─a...
  • gao_chun
  • gao_chun
  • 2015年08月01日 16:09
  • 14846

4.Libgdx扩展学习之Box2D_创建多边形刚体和圆角矩形

主要是根据这2篇博客来写的 1. http://bbs.9ria.com/thread-136661-1-1.html 2. http://bbs.9ria.com/th...
  • zqiang_55
  • zqiang_55
  • 2016年12月12日 19:50
  • 955

Transform Matrix(矩阵变形)-Css3演示

Transform Matrix(矩阵变形)-Css3演示
  • henren555
  • henren555
  • 2013年09月20日 16:23
  • 1339

圆角矩形“RoundRectShape”使用详解

圆角矩形 常用作一些组件的背景 构造函数: RoundRectShape(float[] outerRadii, RectF inset, float[] innerRadii)  Specifie...
  • Silk2018
  • Silk2018
  • 2014年02月14日 10:48
  • 8575
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Android之libgdx裁剪图片成圆角矩形
举报原因:
原因补充:

(最多只允许输入30个字)