如何从GLSurfaceView中保存位图(仅位图,而不是整个纹理)

时间:2015-09-16 06:27:18

标签: android opengl-es bitmap textures glsurfaceview

我正在使用此代码对GlSurfaceView上的位图赋予多重效果。 apply-effects-on-image-using-effects

现在,我想保存位图。他们给出了保存位图的代码,但是,整个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

1 个答案:

答案 0 :(得分:0)

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

让图片尺寸为xy,并获取this post后的屏幕尺寸。那就是ab

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

用此来裁剪图像。