Android - 将2位图保存到一个图像文件中

时间:2016-08-18 22:32:53

标签: android android-image android-bitmap android-file

我希望将2位图并排保存到有效图像文件中。

我可以保存booth位图中的所有字节,图像文件是一个有效的图像字节,我可以打开并看到它,但只是第一个位图显示在图像中!

我试过了:

void save_bitmaps()
{
    ByteArrayOutputStream stream = new ByteArrayOutputStream();
    String root = Environment.getExternalStorageDirectory().toString();
    File myDir = new File(root + "/req_images");
    myDir.mkdirs();
    String fname = "Map"+ String.valueOf(10) + ".png";
    File file = new File(myDir, fname);
    for(int i=0;i<2;i++)
    {
        int count=0;
        //------------------------------------------
        Bitmap bitmap = Bitmap.createBitmap(500,500,Bitmap.Config.ARGB_8888);
        Canvas c = new Canvas(bitmap);
        if(i==0)
            c.drawColor(Color.BLUE);
        if(i==1)
            c.drawColor(Color.RED);

        bitmap.compress(Bitmap.CompressFormat.PNG,100,stream);
        byte[] bytarray = stream.toByteArray();
        //----------------------------------------------------------------
        if (file.exists())
            file.delete();
        try {
            FileOutputStream out = new FileOutputStream(file);
            out.write(bytarray,count,bytarray.length);
            out.flush();
            out.close();
            count+=bytarray.length;
        } catch (Exception e) {
            e.printStackTrace();
            Toast.makeText(getContext() , "ERROR" , Toast.LENGTH_SHORT).show();
        }

    }
    Toast.makeText(getContext() ,"Saved" , Toast.LENGTH_SHORT).show();
}

这段代码有效,但没有显示它们两个!

这是我的目标:

Target_Image_File

我怎么做到这一点。如果你知道我怎么做,请帮忙!

注意: 1.我从不想将2个位图组合成另一个位图并保存目标位图。

  1. 如果您知道另一种将2位图保存到一个图像文件而不使用字节数组的方法,请告诉我!
  2. 全部谢谢!

1 个答案:

答案 0 :(得分:0)

使用以下代码您可以添加图像并将它们并排保存。 这对我有用。 一切顺利,希望你的解决方案正确无误。

我在组合图像本身内添加了保存文件功能。您可以根据您需要实现的逻辑来更改它,因为组合图像将是函数的输出。

public Bitmap combineImages(Bitmap c, Bitmap s) { 
Bitmap cs = null; 

int width, height = 0; 

if(c.getWidth() > s.getWidth()) { 
  width = c.getWidth() + s.getWidth(); 
  height = c.getHeight(); 
} else { 
  width = s.getWidth() + s.getWidth(); 
  height = c.getHeight(); 
} 

cs = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888); 

Canvas comboImage = new Canvas(cs); 

comboImage.drawBitmap(c, 0f, 0f, null); 
comboImage.drawBitmap(s, c.getWidth(), 0f, null); 

String tmpImg = String.valueOf(System.currentTimeMillis()) + ".png"; 
String loc="IMAGE Combined-";
OutputStream os = null; 
try { 
  os = new FileOutputStream(loc + tmpImg); 
  cs.compress(CompressFormat.PNG, 100, os); 
} catch(IOException e) { 
  Log.e("combineImages", "problem combining images", e); 
}*/ 

return cs; 
}