3

新手用户问题:

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

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

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

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

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

只是为了使事情复杂化,盒子大小和图像大小会根据手机而变化,我需要使用 API 8(2.2 版,Froyo)。

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

我正在使用 Camera.takePicture() 和 jpegCallback,如下面的代码片段所示(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();

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

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

提前致谢。

4

1 回答 1

1

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

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

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

于 2014-02-27T20:13:28.413 回答