如何从GLSurfaceView中保存位图(仅限位图,不包括整个纹理)

6
我将使用以下代码在GlSurfaceView上给位图应用多个效果。 使用效果在图像上应用效果 现在,我想保存这个位图。他们提供了保存位图的代码,但是整个GlSurfaceView都将被保存为位图图像。相反,我想只保存位图区域以保存为图像。
有一种方法可以从像素中获取位图并制作图像。 例如:
  public Bitmap takeScreenshot(GL10 mGL) {
  final int mWidth = mEffectView.getWidth();
  final int mHeight = mEffectView.getHeight();
  IntBuffer ib = IntBuffer.allocate(mWidth * mHeight);
  IntBuffer ibt = IntBuffer.allocate(mWidth * mHeight);


  mGL.glReadPixels(0, 0, mWidth, mHeight, GL10.GL_RGBA, GL10.GL_UNSIGNED_BYTE, ib);

   // Convert upside down mirror-reversed image to right-side up normal
  // image.
  for (int i = 0; i < mHeight; i++) {
   for (int j = 0; j < mWidth; j++) {
    ibt.put((mHeight - i - 1) * mWidth + j, ib.get(i * mWidth + j));
   }
  }

   Bitmap mBitmap = Bitmap.createBitmap(mWidth, mHeight, Bitmap.Config.ARGB_8888);
  mBitmap.copyPixelsFromBuffer(ibt);
  return mBitmap;
 }

我想,我需要更新它,改为从位图左上角坐标开始,而不是从0, 0开始。这样可以适用于位图的高度和宽度。因此,我可以解决我的问题,但不知道如何在GLSurfaceView中获取位图图像的坐标。请查看下面的图片以获得更多澄清。
原始图片:

enter image description here

在特效屏幕中加载图像:

enter image description here

应用效果后保存的图像:

enter image description here

这就是我想要的。

enter image description here


为什么不在之后裁剪图像? - jyoonPro
@jyoon 裁剪并不是解决方案。即使要裁剪该图像,我也需要有坐标。那是我的问题的解决方案。但我无法获得图像左上角的坐标。 - Shreyash Mahajan
@jyoon 你好像移除了你的答案。为什么? - Shreyash Mahajan
@jyoon 裁剪位图不是解决方案。我需要保留图像的原始分辨率。 - Shreyash Mahajan
把阿拉凯维的聊天记录给我看看... - Arpit B Parekh
显示剩余3条评论
1个回答

0

如果您可以获取图像的尺寸,则可以获取位图的确切位置。

假设图像尺寸为xy,并按照this post获取屏幕尺寸。 让它成为ab

您的起始位置将是((a-x)/2, (b-y)/2)

使用此方法裁剪您的图像。


无论如何,感谢您的回复和支持。 - Shreyash Mahajan
使用这个方法来裁剪图片。 - jyoonPro
那个方法不起作用。我已经告诉过你了。 - Shreyash Mahajan
1
似乎你没有仔细阅读我的问题,请认真阅读。你会得到整个代码。 - Shreyash Mahajan
1
你知道在你给出的参考中这行代码的含义吗:resizedbitmap1=Bitmap.createBitmap(bmp, 0,0,yourwidth, yourheight)?很明显它会从(0,0)开始裁剪,这就是我的问题所在。抱歉,但我不想像那样裁剪我的图像,而只想生成带有相应坐标的图像。我已经尝试了你所解释的方法。我已经在上面发表了评论。如果你不知道解决方案,请不要扩大问题。 - Shreyash Mahajan
显示剩余7条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接