AndroidOpenGLESDemos glReadPixel读取当前缓冲区像素并保存成Bitmap

目录

一、效果

二、说明

三、关键代码

四、相关参考

五、代码地址


一、效果

     

二、说明

如上图,左上角是一个GLSurfaceView,中间是一个按钮,左下角是一个ImageView(初始显示颜色为黑色);当点击按钮之后,利用OpenGL的API glReadPixels 可以将当前GL渲染缓冲区中的颜色获取并可以保存为Bitmap。

三、关键代码

glReadPixels  前4个参数主要控制从缓冲区的什么位置开始读取多长多宽的区域,第5个参数表示数据格式,第6个参数表示数据类型,通常是GL_UNSIGNED_BYTE(此时的第7个参数通常就是ByteBuffer对象,用以存储从GL缓冲区返回的数据)。

        private Bitmap readBufferPixelToBitmap(int width, int height) {
            ByteBuffer buf = ByteBuffer.allocateDirect(width * height * 4);
            buf.order(ByteOrder.LITTLE_ENDIAN);
            GLES20.glReadPixels(0, 0, width, height, GLES20.GL_RGBA, GLES20.GL_UNSIGNED_BYTE, buf);
            buf.rewind();

            Bitmap bmp = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888);
            bmp.copyPixelsFromBuffer(buf);
            return bmp;
        }

四、相关参考

glClearColorglClearglReadPixels ,

设置背景色

五、代码地址

https://github.com/flycatdeng/KarenJar/blob/master/app/src/main/java/com/karenjar/demo/opengl/SaveImageAty.java

  • 2
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Android,我们可以使用不同的方法来读取本地或网络图片并将其转换为Bitmap对象。 如果要读取本地图片,我们可以使用BitmapFactory类的decodeFile()方法。首先,我们需要获取图片的路径,并创建一个File对象,然后将其作为参数传递给decodeFile()方法来获取Bitmap对象。例如: ``` String imagePath = "/sdcard/image.jpg"; // 图片路径 File file = new File(imagePath); Bitmap bitmap = BitmapFactory.decodeFile(file.getAbsolutePath()); ``` 如果要从网络读取图片,我们可以使用网络请求库(如Volley或OkHttp)来发送网络请求并获取图片数据,然后使用BitmapFactory类的decodeByteArray()方法将其转换为Bitmap对象。首先,我们需要创建一个网络请求,并使用Response.Listener回调函数来处理请求功的响应。在回调函数,我们可以将响应的数据转换为Bitmap对象。例如: ``` String imageUrl = "http://example.com/image.jpg"; // 图片URL RequestQueue requestQueue = Volley.newRequestQueue(context); // 创建请求队列 ImageRequest imageRequest = new ImageRequest(imageUrl, new Response.Listener<Bitmap>() { @Override public void onResponse(Bitmap response) { // 处理响应功的情况 // 在这里可以将response转换为Bitmap对象 Bitmap bitmap = response; // 使用Bitmap对象进行后续操作 } }, 0, 0, null, null); requestQueue.add(imageRequest); // 将请求添加到队列 ``` 在将图片转换为Bitmap对象后,我们可以使用得到的Bitmap对象进行后续的操作,如显示在ImageView上、保存到本地文件或进行图像处理等。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值