新手用户问题:
我已经搜索和试验了几天,需要一些帮助。我可能已经阅读了有关此主题的所有 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();
希望视图坐标/尺寸和位图之间存在简单的数学关系。
我也对任何更好的处理方式持开放态度,但尝试使用预览数据本身(太小)并操纵位图(内存不足错误)。
提前致谢。