亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

在android上將大位圖文件調整為縮放輸出文件

在android上將大位圖文件調整為縮放輸出文件

慕絲7291255 2019-06-26 15:33:14
在android上將大位圖文件調整為縮放輸出文件我在一個文件中有一個大位圖(比如3888x2592)。現在,我希望將該位圖調整為800x533,并將其保存到另一個文件中。我通常會通過調用Bitmap.createBitmap方法,但它需要一個源位圖作為第一個參數,但我無法提供這個參數,因為將原始圖像加載到Bitmap對象中當然會超出內存(請參見這里例如)。我也不能讀位圖,例如,BitmapFactory.decodeFile(file, options),提供BitmapFactory.Options.inSampleSize,因為我想把它調整到精確的寬度和高度。使用inSampleSize將位圖調整為972x648(如果我使用inSampleSize=4)或至778x518(如果我使用inSampleSize=5,這甚至不是一種力量。我還想避免使用inSampleSize讀取圖像,例如,在第一步中使用972x648,然后在第二步將其調整到精確的800x533,因為與原始圖像的直接調整相比,質量會很差??偨Y我的問題:是否有一種方法可以讀取10 MP或更多的大型圖像文件,并將其保存到新的圖像文件中,調整到特定的新寬度和高度,而無需獲得OutOfMemory異常?我也試過BitmapFactory.decodeFile(file, options)并手動將Options.outHight和Options.outWidth值設置為800和533,但它不是這樣工作的。
查看完整描述

3 回答

?
HUH函數

TA貢獻1836條經驗 獲得超4個贊

沒有。我很希望有人能糾正我,但我接受了你嘗試過的負載/調整大小的方法,作為一種妥協。

以下是任何人瀏覽的步驟:

  1. 計算最大可能

    inSampleSize

    它仍然產生一個比你的目標大的圖像。
  2. 使用

    BitmapFactory.decodeFile(file, options)

    ,將SampleSize作為選項傳遞。
  3. 使用

    Bitmap.createScaledBitmap().


查看完整回答
反對 回復 2019-06-26
?
慕容708150

TA貢獻1831條經驗 獲得超4個贊

private?Bitmap?getBitmap(String?path)?{Uri?uri?=?getImageUri(path);InputStream?in?=?null;try?{
????final?int?IMAGE_MAX_SIZE?=?1200000;?//?1.2MP
????in?=?mContentResolver.openInputStream(uri);

????//?Decode?image?size
????BitmapFactory.Options?options?=?new?BitmapFactory.Options();
????options.inJustDecodeBounds?=?true;
????BitmapFactory.decodeStream(in,?null,?options);
????in.close();



????int?scale?=?1;
????while?((options.outWidth?*?options.outHeight)?*?(1?/?Math.pow(scale,?2))?>?
??????????IMAGE_MAX_SIZE)?{
???????scale++;
????}
????Log.d(TAG,?"scale?=?"?+?scale?+?",?orig-width:?"?+?options.outWidth?+?",?
???????orig-height:?"?+?options.outHeight);

????Bitmap?resultBitmap?=?null;
????in?=?mContentResolver.openInputStream(uri);
????if?(scale?>?1)?{
????????scale--;
????????//?scale?to?max?possible?inSampleSize?that?still?yields?an?image
????????//?larger?than?target
????????options?=?new?BitmapFactory.Options();
????????options.inSampleSize?=?scale;
????????resultBitmap?=?BitmapFactory.decodeStream(in,?null,?options);

????????//?resize?to?desired?dimensions
????????int?height?=?resultBitmap.getHeight();
????????int?width?=?resultBitmap.getWidth();
????????Log.d(TAG,?"1th?scale?operation?dimenions?-?width:?"?+?width?+?",
???????????height:?"?+?height);

????????double?y?=?Math.sqrt(IMAGE_MAX_SIZE????????????????/?(((double)?width)?/?height));
????????double?x?=?(y?/?height)?*?width;

????????Bitmap?scaledBitmap?=?Bitmap.createScaledBitmap(resultBitmap,?(int)?x,?
???????????(int)?y,?true);
????????resultBitmap.recycle();
????????resultBitmap?=?scaledBitmap;

????????System.gc();
????}?else?{
????????resultBitmap?=?BitmapFactory.decodeStream(in);
????}
????in.close();

????Log.d(TAG,?"bitmap?size?-?width:?"?+resultBitmap.getWidth()?+?",?height:?"?+?
???????resultBitmap.getHeight());
????return?resultBitmap;}?catch?(IOException?e)?{
????Log.e(TAG,?e.getMessage(),e);
????return?null;}


查看完整回答
反對 回復 2019-06-26
  • 3 回答
  • 0 關注
  • 361 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號