android - 位图的大小和方向不正确

标签 android bitmap android-camera2

我正在尝试在ImageView中显示位图。使用Camera2 API,我在ImageReader上找到了ImageReader.OnImageAvailableListener。然后,我从图像创建一个位图:

private final ImageReader.OnImageAvailableListener mOnImageAvailableListener = new
        ImageReader.OnImageAvailableListener() {
            @Override
            public void onImageAvailable(ImageReader reader) {
                mBackgroundHandler.post(new ImageSaver(reader.acquireLatestImage()));
            }
        };
private class ImageSaver implements Runnable {

    private final Image mImage;

    public ImageSaver(Image image) {
        mImage = image;
    }

    @Override
    public void run() {
        ByteBuffer byteBuffer = mImage.getPlanes()[0].getBuffer();
        byte[] bytes = new byte[byteBuffer.remaining()];
        byteBuffer.get(bytes);
        // need to set the bitmap the size of the screen
        final Bitmap bitmap = BitmapFactory.decodeByteArray(bytes, 0, bytes.length);

        runOnUiThread(new Runnable() {
            @Override
            public void run() {
                imageView.setImageBitmap(bitmap);
            }
        });


从屏幕截图中可以看出,位图不会填满整个屏幕,而是横向而不是纵向。我的ImageView看起来像这样:

<ImageView
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:id="@+id/imageView"
        android:layout_alignParentTop="true"
        android:layout_alignParentStart="true" />


它的父级是RelativeLayout,它会填满整个屏幕。那我在做什么错?

enter image description here

最佳答案

使用Android Matrix类对我的情况有所帮助:

                ByteBuffer byteBuffer = mImage.getPlanes()[0].getBuffer();
                byte[] bytes = new byte[byteBuffer.remaining()];
                byteBuffer.get(bytes);
                final Bitmap bitmap = BitmapFactory.decodeByteArray(bytes, 0, bytes.length);

                Matrix matrix = new Matrix();
                matrix.postRotate(90);
                Bitmap scaledBitmap = Bitmap.createScaledBitmap(bitmap,mImage.getWidth(),mImage.getHeight(),true);
                Bitmap rotatedBitmap = Bitmap.createBitmap(scaledBitmap , 0, 0, scaledBitmap .getWidth(), scaledBitmap .getHeight(), matrix, true);


任何人都可以建议我这是一个好的解决方案,还是可以重构此代码?

关于android - 位图的大小和方向不正确,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44981663/

相关文章:

java - Android:已发送 SMS pendingIntent

java - 从 BroadcastReceiver 绑定(bind)到本地服务

android - 如何将Android Studio(1.0)项目导入Intellij 14 Ultimate

android - 变量是否保留方向变化的值?

c++ - 在 WxWidgets 中使用位图

android - 在 NDK 中处理 RGB_565 位图

android - 使用 SCALER_CROP_REGION 裁剪时 Camera2 预览被拉伸(stretch)

java - 适用于旧版 Android 相机的简单图像校正

android - 使用 Fresco 时如何将图像保存到 SD 卡?

Android - 纵向模式下的 Google 示例 HdrViewFinder