我将使用以下代码在GlSurfaceView上给位图应用多个效果。
使用效果在图像上应用效果
现在,我想保存这个位图。他们提供了保存位图的代码,但是整个GlSurfaceView都将被保存为位图图像。相反,我想只保存位图区域以保存为图像。
有一种方法可以从像素中获取位图并制作图像。 例如:
我想,我需要更新它,改为从位图左上角坐标开始,而不是从0, 0开始。这样可以适用于位图的高度和宽度。因此,我可以解决我的问题,但不知道如何在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中获取位图图像的坐标。请查看下面的图片以获得更多澄清。
原始图片:
在特效屏幕中加载图像:
应用效果后保存的图像:
这就是我想要的。