将圆形裁剪图像保存为jpeg格式,在android中背景不透明

3qpi33ja  于 2021-07-03  发布在  Java
关注(0)|答案(1)|浏览(365)

我的要求是,需要裁剪成圆形的形象,并保存为新的形象。为此,我在android中使用canvas的drawroundrect方法裁剪了位图图像。
将图像裁剪为圆形并保存为png格式后,图像背景是透明的。但如果我以jpeg格式保存,图像背景是黑色的。请找到我的密码

RoundedBitmap(Bitmap bitmap)
    {
        Bitmap roundBitmap = Bitmap.CreateBitmap(bitmap.Width, bitmap.Height, Bitmap.Config.Argb8888);
        Canvas canvas = new Canvas(roundBitmap);
        Paint paint = new Paint();
        paint.AntiAlias = true;
        RectF rectF = new RectF(0, 0, bitmap.Width, bitmap.Height);
        canvas.DrawRoundRect(rectF, bitmap.Width / 2, bitmap.Height / 2, paint);

        paint.SetXfermode(new PorterDuffXfermode(PorterDuff.Mode.SrcIn));
        canvas.DrawBitmap(bitmap, 0, 0, paint);
        return roundedBitmap;
    }

使用canvas.drawcolor(color.white);没有帮助。我需要jpeg格式的透明背景色。有可能吗。?
当做,
巴拉提。

6ss1mwsb

6ss1mwsb1#

png支持透明背景,而jpg不支持。所以你可以创建一个白色的图像,然后把原始的画在上面。

public static void convertBitmapToJpg(Bitmap bitmap, string newImgpath)
    {

        Bitmap outB = bitmap.Copy(Bitmap.Config.Argb8888, true);
        Canvas canvas = new Canvas(outB);
        canvas.DrawColor(Color.White);
        canvas.DrawBitmap(bitmap, 0, 0, null);
        Java.IO.File file = new Java.IO.File(newImgpath);
        try
        {
            MemoryStream outFile = new MemoryStream();
            if (outB.Compress(Bitmap.CompressFormat.Jpeg, 100, outFile))
            {
                outFile.Flush();
                outFile.Close();
            }
        }
        catch (System.IO.FileNotFoundException e)
        {

        }
        catch (System.IO.IOException e)
        {

        }
    }

相关问题