Android Canvas画布上放图片,保存图片为黑色,转换成PNG格式还是黑色,画布设置白色则图片不显示,特例出完美的解决办法

网上都说 bitmap.compress(Bitmap.CompressFormat.PNG, 100, fos);替换成bitmap.compress(Bitmap.CompressFormat.JPEG, 100, fos);格式,可能大部分人再保存的图片都不是黑色了,那恭喜你们,可我的怎么设置都是黑色,今天终于找到了突破口。

注释的地方是保存到sdk,我用的是保存到指定路径,你们看着用

private void viewSaveToImage(View view) {
        view.setDrawingCacheEnabled(true);
        view.setDrawingCacheQuality(View.DRAWING_CACHE_QUALITY_HIGH);
        view.setDrawingCacheBackgroundColor(Color.WHITE);

        // 把一个View转换成图片
        Bitmap cachebmp = loadBitmapFromView(view);
        File file = new File("/sdcard/aibiji/");
        if(!file.exists())
            file.mkdirs();
        FileOutputStream fos=null;
        try {
            fos = new FileOutputStream(file.getPath() +"/"+gCurBookID+"-"+gCurPageID+"-"+pictureOrder+".png");
            cachebmp.compress(Bitmap.CompressFormat.PNG, 100, fos);
            fos.flush();
            System.out.println("saveBmp is here");
        } catch (Exception e) {
            e.printStackTrace();
        }finally {
            try {
                fos.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        //保存到sdk卡
//        FileOutputStream fos;
//        String imagePath = "";
//        try {
//            // 判断手机设备是否有SD卡
//            boolean isHasSDCard = Environment.getExternalStorageState().equals(
//                    android.os.Environment.MEDIA_MOUNTED);
//            if (isHasSDCard) {
//                // SD卡根目录
//                File sdRoot = Environment.getExternalStorageDirectory();
//                File file = new File(sdRoot, Calendar.getInstance().getTimeInMillis()+".png");
//                fos = new FileOutputStream(file);
//                imagePath = file.getAbsolutePath();
//            } else
//                throw new Exception("创建文件失败!");
//
//            cachebmp.compress(Bitmap.CompressFormat.PNG, 90, fos);
//
//            fos.flush();
//            fos.close();
//
//        } catch (Exception e) {
//            e.printStackTrace();
//        }


        view.destroyDrawingCache();
    }

计算view的大小,实在不行再绘制,你设置画布了,如果再添加什么图片,我就给你设置成透明,不管你怎么操作就是不影响

private Bitmap loadBitmapFromView(View v) {
        int w = v.getWidth();
        int h = v.getHeight();

        Bitmap bmp = Bitmap.createBitmap(w, h, Bitmap.Config.ARGB_8888);
        Canvas c = new Canvas(bmp);

        c.drawColor(Color.WHITE);
        /** 如果不设置canvas画布为白色,则生成透明 */

        v.layout(0, 0, w, h);
        v.draw(c);

        return bmp;
    }
  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值