gpt4 book ai didi

安卓画图 PorterDuff.Mode.CLEAR

转载 作者:塔克拉玛干 更新时间:2023-11-02 09:01:22 26 4
gpt4 key购买 nike

我正在开发在 Canvas 上绘图的应用程序,类似于来自 Android SDK 的 Finger Paint 演示。我的问题是当我使用 PorterDuff.Mode.CLEAR 时。在绘画和 Canvas 时,如果我尝试删除某些东西,它工作正常。但是,如果我尝试将我的图像保存为 PNG 文件,橡皮擦的笔画会变成黑色,我不确定为什么会这样。这是我正在做的一个例子:

@Override
protected void onDraw(Canvas canvas) {
canvas.drawColor(Color.WHITE);
canvas.drawBitmap(mBitmap, 0, 0, mBitmapPaint);

canvas.drawPath(mPath, mPaint);
}

橡皮擦:

case ERASE_MENU_ID:
mPaint.setXfermode(new PorterDuffXfermode(
PorterDuff.Mode.CLEAR));
return true;

以及我如何保存图像:

            Calendar currentDate = Calendar.getInstance();
SimpleDateFormat formatter= new SimpleDateFormat("yyyyMMMddHmmss");
String dateNow = formatter.format(currentDate.getTime());
File dir = new File(mImagePath);
if(!dir.exists())
dir.mkdirs();

File file = new File(mImagePath + "/" + dateNow +".png");

FileOutputStream fos;
try {
fos = new FileOutputStream(file);
mBitmap.compress(Bitmap.CompressFormat.PNG, 100, fos);
fos.close();
Toast.makeText(getApplicationContext(), "File saved at \n"+mImagePath + "/" + dateNow +".png", Toast.LENGTH_LONG).show();
} catch (FileNotFoundException e) {
Log.e("Panel", "FileNotFoundException", e);
}
catch (IOException e) {
Log.e("Panel", "IOEception", e);
}
return true;

这是一个图片示例:

这是我的 Canvas 在保存之前的样子:

enter image description here

这是保存到 sd 卡后的图像:

enter image description here

最佳答案

fingerpaint 代码的问题是您看到的与压缩到 png 中的不同。看看 onDraw()。首先你把屏幕画成白色。然后添加位图。因为您使用了 Porter Duff Clear,位图的删除部分实际上包含透明的黑色像素(值 0x00000000)。但是因为你有白色背景,所以这些黑色像素显示为白色。

要解决此问题,请更改您的保存代码以执行与绘图代码相同的操作

 try {
fos = new FileOutputStream(file);
Bitmap saveBitmap = Bitmap.createBitmap(mBitmap);
Canvas c = new Canvas(saveBitmap);
c.drawColor(0xFFFFFFFF);
c.drawBitmap(mBitmap,0,0,null);
saveBitmap.compress(Bitmap.CompressFormat.PNG, 100, fos);
saveBitmap.recycle();
...

或者不使用 PortDuff.Clear:

    case ERASE_MENU_ID:
mPaint.setColor(Color.WHITE);

关于安卓画图 PorterDuff.Mode.CLEAR,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10494442/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com