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

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/hujinglovekmg/article/details/51621882

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

原理:利用原图和一个矩形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修改图片资源成圆角矩形
阅读更多
想对作者说点什么?

博主推荐

换一批

没有更多推荐了,返回首页