2013-03-01 101 views
3

新手用戶問題:Android - 如何使用視圖佈局尺寸裁剪jpeg

我已經搜索並嘗試了幾天,需要一些幫助。我可能已經閱讀過關於這個主題的所有帖子,但我仍然無法弄清楚。

我正在嘗試裁剪相機預覽圖像的特定區域。問題在於,藍色框由頂部= 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(); 

希望視圖座標/尺寸和位圖之間有一個簡單的數學關係。

我也開放給任何更好的方式去嘗試使用預覽數據本身(太小)和操縱位圖(內存不足錯誤)。

在此先感謝。

+0

如果你知道你想要的盒子的位置,爲什麼你從相對佈局獲得信息?爲什麼不直接使用問題開始處的信息和Bitmap.createBitmap(位圖源,int x,int y,int width,int height)來獲取新位圖中的子部分? – 2013-03-01 18:55:58

+0

即使你說已經閱讀了所有圖像裁剪,你有沒有檢查過這個答案? http://stackoverflow.com/a/9388244/1657165 – Rigotti 2013-03-01 20:17:00

+0

我明白如何裁剪圖像。我遇到的問題是根據活動佈局上顯示的RelativeLayout的頂部,左側,寬度和高度,我不知道圖像中的x,y,寬度和高度。 (即,佈局是442×960像素,但是JPEG圖像是2448×3264像素)。什麼是關係?我試過縮放,但似乎在預覽之外有更多圖片導致數學關閉。 – Gravitoid 2013-03-01 20:52:42

回答

1

如果有人在乎,我從來沒有找到這個問題的答案。我最終以不同的方式解決了這個問題。我使用了完整的預覽區域,只是讓我的「拍照」按鈕透明到不妨礙。我也從來沒有裁剪,但圖像的大小接近它將裁剪。

從我在去年學到的所有內容中,我不認爲預覽大小和生成的jpg文件大小之間存在關係。不同的手機相機之間的關係似乎不同。

如果有人找到了關係,我仍然樂於瞭解它。