【问题标题】:Combine one image overlaying another image合并一张图片覆盖另一张图片
【发布时间】:2014-01-01 15:29:02
【问题描述】:

我有两张图片,图片 A 是背面的大背景,图片 B 是一个小图标,将合并到图片 A 的顶部。

工作原理

用户从相机中拍了一张照片,这张照片将是图像 A。 用户从布局中选择图标,这将是图像 B。 为图像 B 选择图像后,用户可以在布局周围移动图像 B,以调整图像 B 将覆盖在图像 A 之上的位置。

在用户按下保存后,画布会将两个图像 B 在 A 的顶部与用户想要的位置合并并保存到 SD 卡。

问题

我已经设法让图像 B 在布局中移动但是我不知道如何让它在图像 A 的位置合并。

这就是我为了让图像 B 在布局中移动而做的。

img_additionalImage = (ImageView) findViewById(R.id.img_additionalImage);
    img_additionalImage.setOnTouchListener(new OnTouchListener()
    {
        @SuppressLint("NewApi")
        @Override
        public boolean onTouch(View v, MotionEvent event)
        {
            switch (event.getAction())
            {
                case MotionEvent.ACTION_DOWN:
                    isImageMoving = true;
                    break;
                case MotionEvent.ACTION_MOVE:
                    if (isImageMoving)
                    {
                        x = event.getRawX() - img_additionalImage.getWidth() / 2;
                        y = event.getRawY() - img_additionalImage.getHeight() / 2;
                        img_additionalImage.setX(x);
                        img_additionalImage.setY(y);
                    }
                    break;
                case MotionEvent.ACTION_UP:
                    isImageMoving = false;
                    break;
            }
            return true;
        }
    });

我不知道如何将两个图像与用户选择的位置合并在一起。

【问题讨论】:

    标签: android android-imageview android-canvas android-bitmap


    【解决方案1】:

    如果您使用 RealtiveLayout 或 LinearLayout 作为这 2 个图像视图的父布局,那么您可以通过这种方式捕获该视图..

    view.setDrawingCacheEnabled(true);
    Bitmap b = view.getDrawingCache();
    b.compress(CompressFormat.JPEG, 95, new FileOutputStream("/some/location/image.jpg"));
    

    视图是您的视图。 95是JPG压缩的质量。而文件输出流就是这样。

    setDrawaingCacheEnabled 是什么?

    启用或禁用绘图缓存。当绘图缓存是 启用,下一次调用 getDrawingCache() 或 buildDrawingCache() 将在位图中绘制视图。调用draw(android.graphics.Canvas) 启用缓存时不会从缓存中提取。受益 从缓存中,您必须通过调用来请求绘图缓存 getDrawingCache() 如果返回的位图不是,则将其绘制在屏幕上 空。

    启用绘图缓存类似于在硬件时设置图层 加速被关闭。开启硬件加速后, 启用绘图缓存对渲染没有影响,因为 系统使用不同的加速机制,它忽略了 旗帜。如果您想为视图使用位图,即使硬件 启用加速,见 setLayerType(int, android.graphics.Paint) 有关如何启用软件和硬件层的信息。

    来自Android Docs

    【讨论】:

    • setDrawingCacheEnabled 有什么作用?我想将它们组合在用户定义的位置。什么是视图?布局?
    • 如果设置为真,它将创建该特定视图的位图。当视图改变时。这样你就可以得到那个位图了。
    • 观点是什么?布局?
    • 它是你的两个图像视图的父布局。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-04
    • 2022-01-19
    • 1970-01-01
    • 1970-01-01
    • 2016-03-31
    相关资源
    最近更新 更多