正文

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

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


加載并顯示一幅圖像對(duì)內(nèi)存使用情況具有顯著的影響。例如,HTC G1電話(huà)帶有一個(gè)320萬(wàn)像素的攝像頭。320萬(wàn)像素的攝像頭通常會(huì)捕獲2048×1536像素的圖像。顯示如此大小的32位圖像將需要超過(guò)100 663kb或大約13MB的內(nèi)存。雖然我們的應(yīng)用程序不一定會(huì)因此而耗盡內(nèi)存,但是這肯定會(huì)使得內(nèi)存更加容易耗盡。

Android提供了一個(gè)名為BitmapFactory的實(shí)用程序類(lèi),該程序類(lèi)提供了一系列的靜態(tài)方法,允許通過(guò)各種來(lái)源加載Bitmap圖像。針對(duì)我們的需求,將從文件加載圖像,并在最初的活動(dòng)中顯示它。幸運(yùn)的是,BitmapFactory中的可用方法將會(huì)調(diào)用BitmapFactory.Options 類(lèi),這使得我們能夠定義如何將Bitmap讀入內(nèi)存。具體而言,當(dāng)加載圖像時(shí),可以設(shè)置BitmapFactory應(yīng)該使用的采樣大小。在BitmapFactory.Options中指定inSampleSize參數(shù),這將表明一旦加載時(shí)結(jié)果Bitmap圖像所占的比例。例如,在這里將inSampleSize設(shè)置為8,這會(huì)產(chǎn)生一幅大小是原始圖像大小1/8的圖像。

BitmapFactory.Options bmpFactoryOptions = new BitmapFactory.Options();

bmpFactoryOptions.inSampleSize = 8;

Bitmap bmp = BitmapFactory.decodeFile(imageFilePath, bmpFactoryOptions);

imv.setImageBitmap(bmp);

這是一種快速加載大圖像的方法,但是沒(méi)有真正考慮圖像的原始大小,也沒(méi)有考慮屏幕的大小。最好能夠?qū)D像縮放到剛好適合屏幕。

下面的代碼片段演示了如何使用顯示維度來(lái)確定在加載圖像時(shí)應(yīng)該發(fā)生的減采樣量。當(dāng)使用這些方法時(shí),應(yīng)確保該圖像盡可能多地填充顯示范圍。但如果該圖像只是要在任何一個(gè)維度中顯示100個(gè)像素,那么應(yīng)該使用這個(gè)值而不是顯示維度,可以通過(guò)如下方式獲得該值。

Display currentDisplay = getWindowManager().getDefaultDisplay();

int dw = currentDisplay.getWidth();

int dh = currentDisplay.getHeight();

為了確定圖像的所有尺寸(用于計(jì)算),我們使用了BitmapFactory和BitmapFactory. Options,并將BitmapFactory.Options.inJustDecodeBounds變量設(shè)置為true。這將通知BitmapFactory類(lèi)只須返回該圖像的范圍,而無(wú)須嘗試解碼圖像本身。當(dāng)使用此方法時(shí),BitmapFactory. Options.outHeight和BitmapFactory.Options.outWidth變量將會(huì)被賦值。

// 加載圖像的尺寸而不是圖像本身

BitmapFactory.Options bmpFactoryOptions = new BitmapFactory.Options();

bmpFactoryOptions.inJustDecodeBounds = true;

Bitmap bmp = BitmapFactory.decodeFile(imageFilePath, bmpFactoryOptions);

int heightRatio = (int)Math.ceil(bmpFactoryOptions.outHeight/(float)dh);

int widthRatio = (int)Math.ceil(bmpFactoryOptions.outWidth/(float)dw);

Log.v("HEIGHTRATIO",""+heightRatio);

Log.v("WIDTHRATIO",""+widthRatio);


上一章目錄下一章

Copyright ? 讀書(shū)網(wǎng) ranfinancial.com 2005-2020, All Rights Reserved.
鄂ICP備15019699號(hào) 鄂公網(wǎng)安備 42010302001612號(hào)