【问题标题】:Combine Images in Canvas and then view it through ImageView using Android Studio在 Canvas 中合并图像,然后使用 Android Studio 通过 ImageView 查看
【发布时间】:2021-07-09 09:19:27
【问题描述】:

我想通过在 Canvas 中将它们相互叠加来组合图像,然后使用 ImageView 查看组合。我所知道的是,如果您将第一个位图设置到画布中,您所做的所有其他事情都将添加到第一个位图中。我只得到错误: PointerException:尝试在空对象引用上调用虚拟方法“int android.graphics.Bitmap.getWidth()”

ImageView mainImage = (ImageView) view.findViewById(R.id.mainImage);
    Bitmap bottomImage = BitmapFactory.decodeFile("image1.png");
    Bitmap topImage = BitmapFactory.decodeFile("image2.png");

    Bitmap tempBitmap = Bitmap.createBitmap(bottomImage.getWidth(), bottomImage.getHeight(), Bitmap.Config.RGB_565);
    Canvas tempCanvas = new Canvas(tempBitmap);

    tempCanvas.drawBitmap(bottomImage, 0, 0, null);
    tempCanvas.drawBitmap(topImage, 0, 0, null);

    mainImage.setImageBitmap(bitmap);

【问题讨论】:

    标签: android canvas bitmap imageview


    【解决方案1】:

    试试下面的代码

    public Bitmap drawImageOnImage(Bitmap background, Bitmap pic, int x_to_draw, int y_to_draw, int width, int height)
    {
        try
        {
            Canvas newCanvas = new Canvas(background);
            Bitmap img_bitmap = Bitmap.createScaledBitmap(pic, width, height, true);
            newCanvas.drawBitmap(img_bitmap, x_to_draw, y_to_draw,new Paint());
    
        }catch (Exception e)
        {
            System.out.println("Error Occured=>");
            e.printStackTrace();
        }
    
        return background;
    }
    

    这里的函数需要 2 个输入位图,背景位图和另一个图像位图来绘制背景位图。您将获得为 ImageView 设置的组合位图。 X 和 Y 是顶部图像位图开始绘制的坐标。高度和宽度相同

    【讨论】:

    • 我试过了,但是上面的图片没有显示。但我想出了另一种方法。
    【解决方案2】:

    经过一些实验,这段代码运行良好。我添加了多张顶级图片。

    private void drawAndView(ImageView imgView, Bitmap bottomImage, Bitmap[] topImages){
        Bitmap tempBitmap = Bitmap.createBitmap(bottomImage.getWidth(), bottomImage.getHeight(), Bitmap.Config.RGB_565);
        Canvas tempCanvas = new Canvas(tempBitmap);
    
        tempCanvas.drawBitmap(bottomImage, 0, 0, null);
        for (Bitmap bitmap : topImages){
            tempCanvas.drawBitmap(bitmap, 0, 0, null);
        }
    
        imgView.setImageBitmap(tempBitmap);
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-07-22
      • 1970-01-01
      • 1970-01-01
      • 2013-04-04
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多