gpt4 book ai didi

android - 组合一张图像覆盖另一张图像

转载 作者:行者123 更新时间:2023-11-29 17:53:58 24 4
gpt4 key购买 nike

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

工作原理

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

在用户按下保存之后, Canvas 将合并两个图像,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;
}
});

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

最佳答案

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

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

其中 view 是您的 View 。 95 是 JPG 压缩的质量。文件输出流就是这样。

setDrawingCacheEnabled 是什么?

Enables or disables the drawing cache. When the drawing cache is enabled, the next call to getDrawingCache() or buildDrawingCache() will draw the view in a bitmap. Calling draw(android.graphics.Canvas) will not draw from the cache when the cache is enabled. To benefit from the cache, you must request the drawing cache by calling getDrawingCache() and draw it on screen if the returned bitmap is not null.

Enabling the drawing cache is similar to setting a layer when hardware acceleration is turned off. When hardware acceleration is turned on, enabling the drawing cache has no effect on rendering because the system uses a different mechanism for acceleration which ignores the flag. If you want to use a Bitmap for the view, even when hardware acceleration is enabled, see setLayerType(int, android.graphics.Paint) for information on how to enable software and hardware layers.

来自 Android Docs

关于android - 组合一张图像覆盖另一张图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20866427/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com