2013-04-15 153 views
2

我已經創建了自己的控制器用安卓相機拍照。我的問題是,輸出顯示比預期的更小的圖像。我檢查了我的位圖的寬度和高度是這樣的:用安卓相機拍照

int w = bmp.getWidth(); 
int h = bmp.getHeight(); 

此輸出w = 480h = 640我以爲是在像素尺寸。這是我拍攝照片

​​

方法凡我Activity訂閱這一事件onJpegPictureTaken

@Override 
    public void onJpegPictureTaken(byte[] data, Camera camera) { 
     Intent i = new Intent(this, ImageEditing.class); 
     i.putExtra("image", data); 
     startActivity(i); 
    } 

這樣做的目的是爲了推出一個新Activity編輯圖像,如縮放和拖動。這ImageEditing.class得到這樣的畫面:

flipped = flipByteArrayNintyDegress(getIntent().getExtras() 
       .getByteArray("image")); 

     Bitmap bmp = BitmapFactory.decodeByteArray(flipped, 0, flipped.length); 
     image = (ImageView) findViewById(R.id.imageView1); 
     image.setImageBitmap(bmp); 
     image.setOnTouchListener(this); 

我首先想到的是我的ImageView有一些限制,由於ImageView的高度和寬度,但事實並非如此。下面是佈局XML:

<?xml version="1.0" encoding="utf-8"?> 
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:orientation="vertical" > 

    <ImageView 
     android:id="@+id/imageView1" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:scaleType="matrix"/> 

</FrameLayout> 

下面是結果,當我拍攝圖像

enter image description here 有誰知道這是怎麼回事呢?爲什麼圖像被縮放?

+2

你的形象是SOOOOO元 – Prisoner

回答

5

data返回到onJpegPictureTaken()旨在作爲縮略圖表示。您收到Camera.ParametersgetSupportedJpegThumbnailSizes()報告的尺寸之一。相機中沒有足夠的內存通過byte[]陣列發送整個全分辨率圖像,甚至壓縮/編碼爲Jpeg圖像。因此,縮略圖以預覽結果的快速方式發送。您必須找到圖像的存儲位置才能以全分辨率訪問它。

此外,即使那麼您將不得不用BitmapFactory.Options中的比例因子打開它,以便將它作爲Bitmap的內存來使用。

還檢查Camera.Parameters上的setPictureSize(),並檢查getSupportedPictureSizes()可用的支持的尺寸。


允許Android拍照爲您

您可能會導致Android系統的攝像頭應用程序採取全分辨率的圖片,並返回到您的Activity之後使用象這樣的例子:Allow user to select camera or gallery for image。您的Activity將在攝像頭捕獲到全分辨率保存的圖像文件後訪問。

爲了翻轉或旋轉圖像的完整分辨率(無法以此尺寸打開爲Bitmap),您可以修改描述AFine轉換的EXIF數據。這不會修改實際的像素數據,但會改變它在大多數系統上顯示的方式。有幾個如何在這個網站上讀寫EXIF數據的例子,但是我沒有我現在使用的代碼示例。

+0

所以我需要將圖像保存了'onJpegPictureTaken()'裏面? –

+0

不,這沒有幫助。無論您如何使用該功能,您在該功能中獲得的縮略圖數據都不會變大。你可以用'setPictureSize()'使它更大,但不能太大。 –

+0

Hrmp。很煩人.. –

0

flipByteArrayNintyDegress的執行情況如何?

/亞龍

+0

輸出分辨率與輸入分辨率相同。 –