在图像编辑器中处理大位图

时间:2012-12-27 15:49:30

标签: android bitmap

对于我目前正在编写的程序,我需要一个简单的图像编辑器。基本上,用户只需从库中选择图像即可导航到此编辑器。选择后,将创建图像编辑器活动,并允许用户执行简单的编辑操作,如旋转,亮度调整,缩放等。

目前我已经设法相对轻松地实现上述功能。我的问题在于将相关图像动态添加到ImageView。你们许多人可能知道; Binder事务缓冲区具有有限的固定大小,当前为1Mb,由进程中正在进行的所有事务共享。因此,我只能将压缩版本的位图加载到我的ImageView中,这对我来说是一个相当大的问题(我的程序主要是为平板电脑设计的)。我已经对这个问题进行了大量的研究,发现可以将Bitmap分成几个较小的位图,并将它们放在几个ImageView中,使用BitmapRegionDecoder创建一个连续图像的错觉(如本{{3 }})。虽然这已经成功地允许我显示大图像,但我不知道我应该如何使用ImageView的多个实例来实现缩放功能。是否有一种相对简单的方法可以做到这一点?

2 个答案:

答案 0 :(得分:3)

看看这个video from Google I/O,他们开发了一个带图像编辑功能的高级图库应用。

您可以下载应用程序here的源代码。这是它打开图像编辑活动的方式:

private OnItemClickListener mPhotoClickListener = new OnItemClickListener() {
    @Override
    public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
        // User clicked on photo, open our viewer
        final Intent intent = new Intent(AlbumActivity.this, PhotoActivity.class);
        final Uri data = ContentUris.withAppendedId(
                MediaStore.Images.Media.EXTERNAL_CONTENT_URI, id);
        intent.setData(data);
        startActivity(intent);
    }
};

图库还实现了图像编辑功能。代码可能会有所帮助。

答案 1 :(得分:3)

你尝试过这个吗? options.inJustDecodeBounds应该设置为true。

BitmapFactory.Options options = new BitmapFactory.Options();
options.inJustDecodeBounds = true;
BitmapFactory.decodeResource(getResources(), R.id.myimage, options);
int imageHeight = options.outHeight;
int imageWidth = options.outWidth;
String imageType = options.outMimeType;

http://developer.android.com/training/displaying-bitmaps/load-bitmap.html