首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用XferMode在画布上绘制圆形位图

用XferMode在画布上绘制圆形位图
EN

Stack Overflow用户
提问于 2015-08-09 11:27:44
回答 1查看 1.3K关注 0票数 0

我想在画布上画一个圆形的位图。如果我想要绘制的画布是透明的,则位图将被正确地剪裁,但如果我以前用不同的颜色绘制过一个矩形,则不会。

,这是我得到的,

代码语言:javascript
复制
    paint.setColor(col.colors_Form[1]);
    mCanvas.drawRect(0, 0, dim.titleContainer_Width, dim.titleContainer_Height, paint);

   [...]


    if (!mFormValues_BasicInformation.get(0).getAvatarImage().equals(""))  {

        mCanvas.save();

        mCanvas.translate(300, 300);

        byte[] byteArray = mFormValues_BasicInformation.get(0).getAvatarImage();

        Bitmap bmp = Bitmap.createScaledBitmap(BitmapFactory.decodeByteArray(byteArray, 0, byteArray.length), 250, 250, false);

        final int color = col.colors_Form[1];
        final Paint avatarPaint = new Paint();
        final Rect rect = new Rect(0, 0, bmp.getWidth(),
                bmp.getHeight());

        avatarPaint.setAntiAlias(true);
        mCanvas.drawARGB(0, 0, 0, 0);

        avatarPaint.setColor(color);
        mCanvas.drawCircle(bmp.getWidth() / 2,
                bmp.getHeight() / 2, bmp.getWidth() / 2, paint);
        avatarPaint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.SRC_IN));
        mCanvas.drawBitmap(bmp, rect, rect, avatarPaint);
        bmp.recycle();

        mCanvas.restore();
    }

有人知道怎么解决这个问题吗?(预告:)

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-08-09 12:11:54

BitmapShader做到了这一点:

代码语言:javascript
复制
        [...]
        byte[] byteArray = mFormValues_BasicInformation.get(0).getAvatarImage();
        Bitmap bmp = Bitmap.createScaledBitmap(BitmapFactory.decodeByteArray(byteArray, 0, byteArray.length), 500, 500, false);

        final Paint avatarPaint = new Paint();

        BitmapShader shader = new BitmapShader(bmp, BitmapShader.TileMode.CLAMP, BitmapShader.TileMode.CLAMP);
        avatarPaint.setShader(shader);
        avatarPaint.setAntiAlias(true);

        float r = Math.min(bmp.getWidth(), bmp.getHeight()) / 2f;
        mCanvas.drawCircle(r, r, r, avatarPaint);

        bmp.recycle();
        [...]

其他信息:

CircleTranform

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31903727

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档