将两个图像合并为一个方向问题

Posted

技术标签:

【中文标题】将两个图像合并为一个方向问题【英文标题】:Combine two images into one orientation issue 【发布时间】:2014-06-14 06:39:27 【问题描述】:

我想制作一个应用程序,用户可以先用后置摄像头拍照,然后再用前置摄像头拍照。

所以,之后我得到了两张位图,我想将它们组合成一张图片。

这段代码我用于前置摄像头参数:

//Set up picture orientation for saving...
Camera.Parameters parameters = theCamera.getParameters();
parameters.setRotation(90);
frontCamera.setParameters(parameters);

//Set up camera preview and set orientation to PORTRAIT
        frontCamera.stopPreview();
        frontCamera.setDisplayOrientation(90);
        frontCamera.setPreviewDisplay(holder);
        frontCamera.startPreview(); 

我用这个代码用前置摄像头拍照

  cameraObject.takePicture(shutterCallback, rawCallback, jpegCallback);

后置摄像头拍照回调

      PictureCallback jpegCallback = new PictureCallback() 
      @Override
      public void onPictureTaken(byte[] data, Camera camera) 
        backBitmap = decodeBitampFromByte(data, 0, 800, 800);   

        frontCameraObject.release();  

        initFrontCamera();  

             
;

注意: 类似代码用于前置摄像头拍照。我得到了两个位图,然后我尝试将它们与下面的代码结合起来,但是我保存的位图方向错误。

我使用这段代码来组合两个位图:frontBitmap、backBitmap。

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

int w = c.getWidth() + s.getWidth();
int h;
if(c.getHeight() >= s.getHeight())
 h = c.getHeight();
else
 h = s.getHeight();

cs = Bitmap.createBitmap(w, h, 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";

    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; 
     

注意 带瓶水的图像是用后置摄像头拍摄的,其他是用前置摄像头拍摄的。

【问题讨论】:

您保存的位图是横向的。你想要它的肖像吗?您还没有告诉我们组合的位图应该是什么样子。你想要什么? 是的,我想要它在肖像中。合图上半部分为后置摄像头,下半部分为前置摄像头。 然后不要像这里那样添加宽度: int w = c.getWidth() + s.getWidth();而是添加高度。并将两个位图旋转到正确的位置(如果你想要的话)。 我尝试过像这样更改代码,但它仍然不起作用,即使我看不到正面图像。诠释 w; int h = c.getHeight() + s.getHeight(); if(c.getHeight() >= s.getHeight()) w = c.getWidth(); else w = s.getWidth(); 在 if 语句中你应该比较宽度!对于第二个 drawBitmap() 调整 x,y。 【参考方案1】:

尝试将comboImage.drawBitmap(s, c.getWidth, 0f, null); 更改为

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

【讨论】:

以上是关于将两个图像合并为一个方向问题的主要内容,如果未能解决你的问题,请参考以下文章

如何使用FFmpeg将两个图像合并为一个? [重复]

PHP - ImageCopyMerge 分层图像

将两个imageViews合并为一个并保存iOS swift

将两个或多个图像合并为一个

用 PHP 合并两个图像

Python将两个图像合并成一个图像(横向合并)