b2科目四模拟试题多少题驾考考爆了怎么补救
b2科目四模拟试题多少题 驾考考爆了怎么补救

surfaceview 大小 记录:Android(5.0)截屏的实现(6)

电脑杂谈  发布时间:2018-01-04 12:08:03  来源:网络整理

????通过 getPlanes( )可以获取到对应的数据流,现在怎么去把流转成图片问题接踵而来,里面有涉及到一些计算了。下面对Plane类中方法做一个记录:

????getRowStride( )

????此颜色平面的行跨度(以字节为单位)。这是图像中连续两行像素开始的距离。 请注意,对于某些格式(如RAW_PRIVATE ,stried未定义,对这些格式的图像调用getRowStride将导致抛出UnsupportedOperationException。 对于行跨度很好定义的格式,行跨度总是大于0。

???? getPixelStride( )

????相邻像素采样之间的距离,以字节为单位。这是一行像素中两个连续像素值之间的距离。 它可能大于单个像素的大小,以考虑交错图像数据或填充格式。 请注意,某些格式(如RAW_PRIVATE像素跨距未定义,并且在这些格式的图像上调用getPixelStride将导致抛出UnsupportedOperationException。 对于像素跨度定义明确的格式,像素跨度总是大于0。

????getBuffer( )

????获取包含帧数据的直接ByteBuffer 。特别是,返回的缓冲区总是有isDirect = true ,所以底层数据可以被映射为JNI中的一个指针,而不用GetDirectBufferAddress做任何拷贝。对于原始格式,每个平面只保证包含最后一行中最后一个像素的数据。 换句话说,最后一行之后的步幅可能不会被映射到缓冲区中。 这是任何交错格式的必要条件。

????看了上面半天只有一句话,你在说什么腌。列出上面的数据只是单纯的想说明,这个获取的Buffer不可以直接转换成Bitmap的。需要通过计算的。计算的公式如下:

                try {
                    img = imageReader.acquireLatestImage();
                    if (img != null) {
                        Image.Plane[] planes = img.getPlanes();
                        if (planes[0].getBuffer() == null) {
                            return;
                        }
                        int width = img.getWidth();
                        int height = img.getHeight();
                        final ByteBuffer buffer = planes[0].getBuffer();
                        int pixelStride = planes[0].getPixelStride();
                        int rowStride = planes[0].getRowStride();
                        int rowPadding = rowStride - pixelStride * width;
                        Bitmap bitmap = Bitmap.createBitmap(width+rowPadding/pixelStride, height,
                                Bitmap.Config.ARGB_8888);
                        bitmap.copyPixelsFromBuffer(buffer);
                        bitmap = Bitmap.createBitmap(bitmap, 0, 0,width, height);
                        ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
                        int options_ = 30;//压缩分辨率,比如取值为30,那么压缩了30%
                        bitmap.compress(Bitmap.CompressFormat.JPEG, options_, byteArrayOutputStream);


                    }

                } catch (Exception e) {
                    e.printStackTrace();
                } finally {
                    if (null != fos) {
                        try {
                            fos.close();
                        } catch (IOException e) {
                            e.printStackTrace();
                        }
                    }
                    if (null != bitmap) {
                        bitmap.recycle();
                    }
                    if (null != img) {
                        img.close();
                    }

                }


本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/jisuanjixue/article-58101-6.html

相关阅读
    发表评论  请自觉遵守互联网相关的政策法规,严禁发布、暴力、反动的言论

    热点图片
    拼命载入中...