Я использую этот код для многократного воздействия на растровое изображение, которое находится на 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.
Пожалуйста, проверьте изображение ниже для получения более подробного пояснения.
Исходное изображение:
Загруженное изображение на экране эффекта:
Изображение после применения эффекта и его сохранение:
Это то, что я хочу.