保存的位图是黑色的。

5

我创建了一个带有文本的位图,并可以在ImageView中查看它,但是当我保存位图时,我只得到了黑色的图片。我已经花费了三个小时寻找类似问题的答案,但是没有一个适用于我。这是代码。 谢谢任何帮助。

 public void createBitmap(){
    Bitmap LabelBitmap;
    FileOutputStream fos = null;
//create Text Bitmap
    LabelBitmap = textAsBitmap(this,"BRO D 0813","fonts/arialbd.ttf", 4, Color.BLACK);
//load bitmap in to Imageview
    ImageView myImageView = (ImageView) findViewById(R.id.imageView);
    myImageView.setImageBitmap(LabelBitmap);
// save bitmap
    String root = Environment.getExternalStorageDirectory().toString();
    File myDir = new File(root + "/myfolder");
    myDir.mkdirs();

    ByteArrayOutputStream bytes = new ByteArrayOutputStream();

    LabelBitmap.compress(Bitmap.CompressFormat.JPEG, 100, bytes);
    if (!myDir.exists()) {
        myDir.mkdir();
    }

    File myDirFile = new File(root +"/myfolder/mybitmap.jpg");

    try {
        if(myDirFile.exists()){
            myDirFile.delete();
        }
        myDirFile.createNewFile();
    } catch (IOException e) {
        e.printStackTrace();
    }

    try {
        fos = new FileOutputStream(myDirFile);
    } catch (FileNotFoundException e) {
        e.printStackTrace();
    }
    try {
        fos.write(bytes.toByteArray());
        fos.flush();
        fos.close();
        Toast.makeText(this, "Image saved", Toast.LENGTH_SHORT).show();
    } catch (IOException e) {
        e.printStackTrace();
    }

}

看一下,这是使用画布并最终得到相同结果的方法 https://dev59.com/ZWoy5IYBdhLWcg3wD57G - Yurets
1个回答

11

JPEG 图像默认有黑色背景,所以如果你的文本颜色也是黑色,你会得到一张黑色的图片。如果您的图像没有背景颜色,则必须将其保存为 PNG。按照以下更改并尝试:

LabelBitmap.compress(Bitmap.CompressFormat.JPEG, 100, bytes);

至:

LabelBitmap.compress(Bitmap.CompressFormat.PNG, 100, bytes);

谢谢,这就解决了。我还发现,如果保存为JPG格式,创建位图时需要添加这一行代码:myCanvas.drawColor(Color.WHITE); - Kim HJ

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接