【发布时间】: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) 来获取新位图中的小节?
-
尽管您说已经阅读了所有图像裁剪,但您检查过这个答案吗? stackoverflow.com/a/9388244/1657165
-
我了解如何裁剪图像。我遇到的问题是我不知道图像中的 x、y、宽度、高度,基于活动布局上显示的 RelativeLayout 的顶部、左侧、宽度、高度。 (即布局为 442 x 960 像素,但 jpeg 图片为 2448 x 3264 像素)。是什么关系?我尝试过缩放,但似乎预览之外还有更多图片导致数学关闭。
标签: android graphics android-camera