【发布时间】:2015-12-12 14:27:42
【问题描述】:
我正在使用此代码对 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 中获取位图图像的坐标。
请查看下图以获得更多说明。
原图:
在效果画面中加载图片:
应用效果并保存后的图片:
这就是我想要的。
【问题讨论】:
-
GLSurfaceView 的表面包含您在其上绘制的内容。由于您在绘制图像时指定了坐标,所以我不明白为什么您要读取图像时不知道坐标。
-
@fadden 我不太擅长 OpenGL-es。我的代码与我在问题中给出的链接几乎相同。现在请您回答它以获取图像坐标并仅拍摄具有效果的图像部分吗?
-
之后为什么不裁剪图像?
-
@jyoon 裁剪不是解决方案。即使要裁剪该图像,我也需要坐标。这就是我的问题的解决方案。但我没有得到图像左上角的坐标。
-
@jyoon 好像你已经删除了你的答案。为什么?
标签: android opengl-es bitmap textures glsurfaceview