Android - 如何使用视图布局尺寸裁剪 jpeg

Posted

技术标签:

【中文标题】Android - 如何使用视图布局尺寸裁剪 jpeg【英文标题】:Android - How crop jpeg using view layout dimensions 【发布时间】:2013-03-01 18:46:00 【问题描述】:

新手用户问题:

我已经搜索和试验了几天,需要一些帮助。我可能已经阅读了有关此主题的所有 SO 帖子,但我仍然无法弄清楚。

我正在尝试裁剪相机预览图像的特定区域。问题是蓝色框是由顶部 = 150 和左侧 = 38,高度 = 292 和宽度 = 600 的布局定义的。图像的高度 = 2448 和宽度 = 3264。

大框是相机预览屏幕,小框是我要裁剪的部分(显然我还没有能力发布图片)。

----------------------------------------- | | | | | | | --------- | | | | | | --------- | | | -----------------------------------------

如何裁剪图像,以便只剩下框中的部分?我将在另一个活动中展示它,所以我不担心那部分。

更复杂的是,盒子大小和图像大小会因手机而异,我需要使用 API 8(2.2 版,Froyo)。

我也不想将图像保存到文件中,因为那样我必须对其进行加密(图片将是存款支票的图像)。

我正在使用 Camera.takePicture() 和 jpegCallback,如下面的代码 sn-p(initialBitmap 是上面的“大盒子”,而 rl 是“小盒子”):

    PictureCallback jpegCallback = new PictureCallback() 
    public void onPictureTaken(byte[] data, Camera camera) 
        if ( data != null && data.length > 0 ) 
            Bitmap initialBitmap = BitmapFactory.decodeByteArray(data, 0, data.length);

            int bitmapHeight = initialBitmap.getHeight();
            int bitmapWidth = initialBitmap.getWidth();

            // get the "picture" frame
            RelativeLayout rl = (RelativeLayout) findViewById( R.id.clear_layout );

            int frameX = rl.getLeft();
            int frameY = rl.getTop();
            int frameHeight = rl.getHeight();

希望视图坐标/尺寸和位图之间存在简单的数学关系。

我也对任何更好的处理方式持开放态度,但我尝试使用预览数据本身(太小)和操作位图(内存不足错误)。

提前致谢。

【问题讨论】:

如果您知道要获取的框的位置,为什么要从相对布局中获取信息?为什么不直接使用问题开头的信息和 Bitmap.createBitmap(Bitmap source, int x, int y, int width, int height) 来获取新位图中的小节? 尽管您说已经阅读了所有图像裁剪,但您检查过这个答案吗? ***.com/a/9388244/1657165 我了解如何裁剪图像。我遇到的问题是我不知道图像中的 x、y、宽度、高度,基于活动布局上显示的 RelativeLayout 的顶部、左侧、宽度、高度。 (即布局为 442 x 960 像素,但 jpeg 图片为 2448 x 3264 像素)。是什么关系?我尝试过缩放,但似乎预览之外还有更多图片导致数学关闭。 【参考方案1】:

万一有人关心,我从来没有找到这个问题的答案。我最终以不同的方式解决了这个问题。我使用了完整的预览区域,只是让我的“拍照”按钮足够透明,不会碍事。我也从未裁剪过,但图像大小接近裁剪后的大小。

根据我去年学到的所有知识,我认为预览大小和生成的 jpg 文件大小之间没有关系。对于不同的手机摄像头,这种关系似乎有所不同。

如果有人找到了关系,我仍然很乐意了解它。

【讨论】:

以上是关于Android - 如何使用视图布局尺寸裁剪 jpeg的主要内容,如果未能解决你的问题,请参考以下文章

Android,如何裁剪修复图像视图[重复]

Android图像视图顶部裁剪

更新旋转视图的尺寸

使用“com.android.camera.action.CROP”意图裁剪图像,在某些设备上返回小尺寸位图

如何在 NativeScript 布局中查找/查看视图的尺寸?

android 视图之间的额外空格