gpt4 book ai didi

android - 将相机拍摄的图像保存在下方的图像叠加层

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:44:10 24 4
gpt4 key购买 nike

我的应用程序有一个“photobooth”功能,允许用户用相机拍照,同时在相机 View 的顶部显示叠加图像。拍照后,我需要将用户在拍照时看到的内容保存到文件系统中。

我在开发解决方案时遇到了 1 个大问题:捕获具有兼容尺寸的图像,我可以在其中附加叠加图像,从而导致用户在拍照时看到的内容。

我似乎无法从相机中捕捉到定义尺寸的图像(我基本上必须从它们的列表中选择)。有些手机只能生产特定尺寸。

由于我无法选择捕获图像的大小,似乎我需要包含许多不同大小的叠加图像,并将最佳匹配附加到捕获图像。我不能只是在相机图像上叠加任何旧的叠加层并使其看起来正确。

问题:

  • 我是否让这个“相机图像 + 叠加图像创建”过程过于复杂了?
  • 在不需要包括多个不同尺寸的叠加图像的情况下完成此任务,您有什么建议?

编辑:这是我的解决方案(简要)。请意识到这不是一个完美的方法,也许不是最有效的方法,但它确实有效。有些事情可能是不必要的/多余的,但无论如何!

注意事项:

  • 这在平板设备上效果不佳。
  • 覆盖图像需要旋转以处于横向模式(即使您拍摄的是纵向拿着手机的图像)
  • 叠加层尺寸为 480x320
  • 您需要在拍照时强制 Activity 进入横向模式(现在叠加层看起来像它的纵向模式了!)
  • 我使用 addContentView(overlayImageView, new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT)); 添加叠加 ImageView

...

final Camera.PictureCallback jpegCallback = new Camera.PictureCallback() {
@Override
public void onPictureTaken(byte[] data, Camera camera) {
BitmapFactory.Options options = new BitmapFactory.Options();
Bitmap mutableBitmap = null;
try {
//for a PORTRAIT overlay and taking the image holding the phone in PORTRAIT mode
mutableBitmap = BitmapFactory.decodeByteArray(data, 0, data.length, options).copy(Bitmap.Config.RGB_565, true);
Matrix matrix = new Matrix();
int width = mutableBitmap.getWidth();
int height = mutableBitmap.getHeight();
int newWidth = overlayImage.getDrawable().getBounds().width();
int newHeight = overlayImage.getDrawable().getBounds().height();
float scaleWidth = ((float) newWidth) / width;
float scaleHeight = ((float) newHeight) / height;
matrix.postScale(scaleWidth, scaleHeight);
matrix.postRotate(90);

Bitmap resizedBitmap = Bitmap.createBitmap(mutableBitmap, 0, 0, mutableBitmap.getWidth(), mutableBitmap.getHeight(), matrix, true);
finalBitmap = resizedBitmap.copy(Bitmap.Config.RGB_565, true);
Canvas canvas = new Canvas(finalBitmap);

Bitmap overlayBitmap = BitmapFactory.decodeResource(getResources(), overlay);
matrix = new Matrix();
matrix.postRotate(90);
Bitmap resizedOverlay = Bitmap.createBitmap(overlayBitmap, 0, 0, overlayBitmap.getWidth(), overlayBitmap.getHeight(), matrix, true);
canvas.drawBitmap(resizedOverlay, 0, 0, new Paint());
canvas.scale(50, 0);
canvas.save();
//finalBitmap is the image with the overlay on it
}
catch(OutOfMemoryError e) {
//fail
}
}
}

最佳答案

我认为这是一个关于如何操作叠加层的问题。您可以根据捕获的图像大小裁剪它并调整其大小以适合,同时保持其比例。您可以通过比较其与背景比率的比率来将叠加层放置到其最佳位置。

我会保持覆盖层足够大,并带有宽边框(出血),以便使用过滤器轻松地将它们调整为图像,从而以良好的质量绘制它。我想叠加层是您会设计并具有透明部分的东西,例如没有脸的 clown 图像,以便用户可以将其他人的脸贴入其中?

关于android - 将相机拍摄的图像保存在下方的图像叠加层,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5263152/

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