正文

使用內(nèi)置的Camera應(yīng)用程序捕獲圖像(4)

Android多媒體開發(fā)高級編程 作者:(美)艾佛瑞


在我們的布局XML (layout/main.xml)文件中,有一個ImageView對象。ImageView是泛型視圖的擴展,其支持圖像的顯示。由于我們有一個帶有指定ReturnedImageView編號(id)的ImageView對象,因此需要在活動中獲得它的引用,并通過setImageBitmap方法將它的Bitmap對象設(shè)置為返回的圖像。這將使得應(yīng)用程序用戶能夠查看這幅捕獲的圖像。

為了獲得ImageView對象的引用,使用在Activity類中指定的標準方法findViewById。該方法使得我們能夠以編程方式引用在布局XML文件中指定的元素,我們正在通過將元素id傳遞給setContentView來使用該布局XML文件。上述示例在XML中以如下方式指定ImageView對象:

<ImageView android:id="@+id/ReturnedImageView" android:layout_width=

"wrap_content" android:layout_height="wrap_content"></ImageView>

為了引用ImageView并通知它顯示來自Camera的Bitmap對象,使用以下代碼。

imv = (ImageView) findViewById(R.id.ReturnedImageView);

imv.setImageBitmap(bmp);

當運行這個示例時,您可能會注意到結(jié)果圖像很小(在我的手機上,它的寬為121像素,高為162像素。其他設(shè)備會具有不同的默認大小)。這不是一個bug——相反,它是經(jīng)過精心設(shè)計的。當通過一個意圖觸發(fā)時,Camera應(yīng)用程序不會將全尺寸的圖像返回給主調(diào)活動。通常,這樣做需要大量的內(nèi)存,而移動設(shè)備一般會在內(nèi)存方面受限。相反,Camera應(yīng)用程序?qū)⒃诜祷氐囊鈭D中返回一幅很小的縮略圖,如圖1-2所示。

為了繞過大小限制,從Android 1.5開始,在大多數(shù)設(shè)備上可以將一個附加值傳遞給觸發(fā)Camera應(yīng)用程序的意圖。這個附加值的名稱在MediaStore類中指定,它是一個常量,稱為EXTRA_OUTPUT。這個附加值(采用名-值對的形式)將以URI的方式指示Camera應(yīng)用程序您想要將捕獲的圖像保存在什么位置。

以下代碼片段指示Camera應(yīng)用程序應(yīng)該將圖像保存到設(shè)備的SD卡上,文件名為myfavoritepicture.jpg。

String imageFilePath = Environment.getExternalStorageDirectory()

.getAbsolutePath() + "/myfavoritepicture.jpg";

File imageFile = new File(imageFilePath);

Uri imageFileUri = Uri.fromFile(imageFile);

Intent i = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);

i.putExtra(android.provider.MediaStore.EXTRA_OUTPUT, imageFileUri);

startActivityForResult(i, CAMERA_RESULT);

注意:上述為圖像文件創(chuàng)建URI 的代碼片段可以簡化為下列形式:

imageFileUri = Uri.parse("file:///sdcard/myfavoritepicture.jpg");

然而在實踐中,使用以上所示的方法將會使得代碼更加具有設(shè)備獨立性,并且對于SD卡的命名約定或本地文件系統(tǒng)的URI語法變化具有更好的適應(yīng)性。


上一章目錄下一章

Copyright ? 讀書網(wǎng) www.afriseller.com 2005-2020, All Rights Reserved.
鄂ICP備15019699號 鄂公網(wǎng)安備 42010302001612號