亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 系統 > Android > 正文

Android Bitmap詳細介紹

2020-04-11 12:39:58
字體:
來源:轉載
供稿:網友
復制代碼 代碼如下:

package com.testbitmapscale;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.Iterator;
import com.testbitmapscale.R.drawable;
import android.app.Activity;
import android.graphics.Bitmap;
import android.graphics.Bitmap.Config;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.Matrix;
import android.graphics.Paint;
import android.graphics.PorterDuff.Mode;
import android.graphics.PorterDuffXfermode;
import android.graphics.Rect;
import android.graphics.RectF;
import android.graphics.drawable.BitmapDrawable;
import android.graphics.drawable.Drawable;
import android.media.ThumbnailUtils;
import android.os.Bundle;
import android.os.Environment;
import android.view.View;
import android.widget.ImageView;
//方法:
//1 生成圓角Bitmap圖片
//2 生成Bitmap縮量圖
//3 壓縮圖片場長寬以及kB
//注意:
//以上代碼,測試其中一個方法時最好注釋掉其余的代碼
public class MainActivity extends Activity {
private ImageView imageView;
private Bitmap copyRawBitmap1;
private Bitmap copyRawBitmap2;
private Bitmap copyRawBitmap3;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
imageView = (ImageView) findViewById(R.id.imageView);
//第一種方式:從資源文件中得到圖片
Bitmap rawBitmap = BitmapFactory.decodeResource(getResources(),R.drawable.haha);
copyRawBitmap1=rawBitmap;
copyRawBitmap2=rawBitmap;
copyRawBitmap3=rawBitmap;
//第二種方式:從SD卡中得到圖片(方法1)
String SDCarePath=Environment.getExternalStorageDirectory().toString();
String filePath=SDCarePath+"/"+"haha.jpg";
Bitmap rawBitmap1 = BitmapFactory.decodeFile(filePath, null);
//第二種方式:從SD卡中得到圖片(方法2)
InputStream inputStream=getBitmapInputStreamFromSDCard("haha.jpg");
Bitmap rawBitmap2 = BitmapFactory.decodeStream(inputStream);

//――――>以下為將設置圖片的圓角
Bitmap roundCornerBitmap=this.toRoundCorner(rawBitmap, 40);
imageView.setImageBitmap(roundCornerBitmap);
//――――>以上為將設置圖片的圓角

//――――>以下為將圖片高寬和的大小kB壓縮
// 得到圖片原始的高寬
int rawHeight = rawBitmap.getHeight();
int rawWidth = rawBitmap.getWidth();
// 設定圖片新的高寬
int newHeight = 500;
int newWidth = 500;
// 計算縮放因子
float heightScale = ((float) newHeight) / rawHeight;
float widthScale = ((float) newWidth) / rawWidth;
// 新建立矩陣
Matrix matrix = new Matrix();
matrix.postScale(heightScale, widthScale);
// 設置圖片的旋轉角度
//matrix.postRotate(-30);
// 設置圖片的傾斜
//matrix.postSkew(0.1f, 0.1f);
//將圖片大小壓縮
//壓縮后圖片的寬和高以及kB大小均會變化
Bitmap newBitmap = Bitmap.createBitmap(rawBitmap, 0, 0, rawWidth,rawWidth, matrix, true);
// 將Bitmap轉換為Drawable
Drawable newBitmapDrawable = new BitmapDrawable(newBitmap);
imageView.setImageDrawable(newBitmapDrawable);
//然后將Bitmap保存到SDCard中,方便于原圖片的比較
this.compressAndSaveBitmapToSDCard(newBitmap, "xx100.jpg", 80);
//問題:
//原圖大小為625x690 90.2kB
//如果設置圖片500x500 壓縮后大小為171kB.即壓縮后kB反而變大了.
//原因是將:compress(Bitmap.CompressFormat.JPEG, quality, fileOutputStream);
//第二個參數quality設置得有些大了(比如100).
//常用的是80,剛設100太大了造成的.
//――――>以上為將圖片高寬和的大小kB壓縮


//――――>以下為將圖片的kB壓縮,寬高不變
this.compressAndSaveBitmapToSDCard(copyRawBitmap1,"0011fa.jpg",80);
//――――>以上為將圖片的kB壓縮,寬高不變

//――――>以下為獲取SD卡圖片的縮略圖方法1
String SDCarePath1=Environment.getExternalStorageDirectory().toString();
String filePath1=SDCarePath1+"/"+"haha.jpg";
Bitmap bitmapThumbnail1=this.getBitmapThumbnail(filePath1);
imageView.setImageBitmap(bitmapThumbnail1);
//――――>以上為獲取SD卡圖片的縮略圖方法1

//――――>以下為獲取SD卡圖片的縮略圖方法2
String SDCarePath2=Environment.getExternalStorageDirectory().toString();
String filePath2=SDCarePath2+"/"+"haha.jpg";
Bitmap tempBitmap=BitmapFactory.decodeFile(filePath2);
Bitmap bitmapThumbnail2=ThumbnailUtils.extractThumbnail(tempBitmap, 100, 100);
imageView.setImageBitmap(bitmapThumbnail2);
//――――>以上為獲取SD卡圖片的縮略圖方法2

}
//讀取SD卡下的圖片
private InputStream getBitmapInputStreamFromSDCard(String fileName){
if (Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) {
String SDCarePath=Environment.getExternalStorageDirectory().toString();
String filePath=SDCarePath+File.separator+fileName;
File file=new File(filePath);
try {
FileInputStream fileInputStream=new FileInputStream(file);
return fileInputStream;
} catch (Exception e) {
e.printStackTrace();
}

}
return null;
}


//獲取SDCard的目錄路徑功能
private String getSDCardPath() {
String SDCardPath = null;
// 判斷SDCard是否存在
boolean IsSDcardExist = Environment.getExternalStorageState().equals(android.os.Environment.MEDIA_MOUNTED);
if (IsSDcardExist) {
SDCardPath = Environment.getExternalStorageDirectory().toString();
}
return SDCardPath;
}
//壓縮且保存圖片到SDCard
private void compressAndSaveBitmapToSDCard(Bitmap rawBitmap,String fileName,int quality){
String saveFilePaht=this.getSDCardPath()+File.separator+fileName;
File saveFile=new File(saveFilePaht);
if (!saveFile.exists()) {
try {
saveFile.createNewFile();
FileOutputStream fileOutputStream=new FileOutputStream(saveFile);
if (fileOutputStream!=null) {
//imageBitmap.compress(format, quality, stream);
//把位圖的壓縮信息寫入到一個指定的輸出流中
//第一個參數format為壓縮的格式
//第二個參數quality為圖像壓縮比的值,0-100.0 意味著小尺寸壓縮,100意味著高質量壓縮
//第三個參數stream為輸出流
rawBitmap.compress(Bitmap.CompressFormat.JPEG, quality, fileOutputStream);
}
fileOutputStream.flush();
fileOutputStream.close();
} catch (IOException e) {
e.printStackTrace();

}
}
}

//獲取圖片的縮略圖
private Bitmap getBitmapThumbnail(String filePath){
BitmapFactory.Options options=new BitmapFactory.Options();
//true那么將不返回實際的bitmap對象,不給其分配內存空間但是可以得到一些解碼邊界信息即圖片大小等信息
options.inJustDecodeBounds=true;
//此時rawBitmap為null
Bitmap rawBitmap = BitmapFactory.decodeFile(filePath, options);
if (rawBitmap==null) {
System.out.println("此時rawBitmap為null");
}
//inSampleSize表示縮略圖大小為原始圖片大小的幾分之一,若該值為3
//則取出的縮略圖的寬和高都是原始圖片的1/3,圖片大小就為原始大小的1/9
//計算sampleSize
int sampleSize=computeSampleSize(options, 150, 200*200);
//為了讀到圖片,必須把options.inJustDecodeBounds設回false
options.inJustDecodeBounds = false;
options.inSampleSize = sampleSize;
//原圖大小為625x690 90.2kB
//測試調用computeSampleSize(options, 100, 200*100);
//得到sampleSize=8
//得到寬和高位79和87
//79*8=632 87*8=696
Bitmap thumbnailBitmap=BitmapFactory.decodeFile(filePath, options);
//保存到SD卡方便比較
this.compressAndSaveBitmapToSDCard(thumbnailBitmap, "15.jpg", 80);
return thumbnailBitmap;
}

//參考資料:
//http://my.csdn.net/zljk000/code/detail/18212
//第一個參數:原本Bitmap的options
//第二個參數:希望生成的縮略圖的寬高中的較小的值
//第三個參數:希望生成的縮量圖的總像素
public static int computeSampleSize(BitmapFactory.Options options,int minSideLength, int maxNumOfPixels) {
int initialSize = computeInitialSampleSize(options, minSideLength,maxNumOfPixels);
int roundedSize;
if (initialSize <= 8) {
roundedSize = 1;
while (roundedSize < initialSize) {
roundedSize <<= 1;
}
} else {
roundedSize = (initialSize + 7) / 8 * 8;
}
return roundedSize;
}

private static int computeInitialSampleSize(BitmapFactory.Options options,int minSideLength, int maxNumOfPixels) {
//原始圖片的寬
double w = options.outWidth;
//原始圖片的高
double h = options.outHeight;
System.out.println("========== w="+w+",h="+h);
int lowerBound = (maxNumOfPixels == -1) ? 1 : (int) Math.ceil(Math
.sqrt(w * h / maxNumOfPixels));
int upperBound = (minSideLength == -1) ? 128 : (int) Math.min(
Math.floor(w / minSideLength), Math.floor(h / minSideLength));
if (upperBound < lowerBound) {
// return the larger one when there is no overlapping zone.
return lowerBound;
}
if ((maxNumOfPixels == -1) && (minSideLength == -1)) {
return 1;
} else if (minSideLength == -1) {
return lowerBound;
} else {
return upperBound;
}
}

/**
* @param bitmap 需要修改的圖片
* @param pixels 圓角的弧度
* @return 圓角圖片
*/
//參考資料:
//http://blog.csdn.net/c8822882/article/details/6906768
public Bitmap toRoundCorner(Bitmap bitmap, int pixels) {
Bitmap roundCornerBitmap = Bitmap.createBitmap(bitmap.getWidth(), bitmap.getHeight(), Config.ARGB_8888);
Canvas canvas = new Canvas(roundCornerBitmap);
int color = 0xff424242;//int color = 0xff424242;
Paint paint = new Paint();
paint.setColor(color);
//防止鋸齒
paint.setAntiAlias(true);
Rect rect = new Rect(0, 0, bitmap.getWidth(), bitmap.getHeight());
RectF rectF = new RectF(rect);
float roundPx = pixels;
//相當于清屏
canvas.drawARGB(0, 0, 0, 0);
//先畫了一個帶圓角的矩形
canvas.drawRoundRect(rectF, roundPx, roundPx, paint);
paint.setXfermode(new PorterDuffXfermode(Mode.SRC_IN));
//再把原來的bitmap畫到現在的bitmap?。。∽⒁膺@個理解
canvas.drawBitmap(bitmap, rect, rect, paint);
return roundCornerBitmap;
}

}
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
日韩最新免费不卡| 亚洲第一在线视频| 激情亚洲一区二区三区四区| 国产成人亚洲综合青青| 欧美视频中文字幕在线| 日韩精品中文字| 91高清视频免费观看| 黑人极品videos精品欧美裸| 亚洲国产精品女人久久久| 国产精品偷伦一区二区| 久久伊人色综合| 成人福利在线观看| 青青草原成人在线视频| 日韩欧美一区二区三区| 日韩精品在线影院| 91精品在线影院| 日韩av在线网址| 国模精品视频一区二区三区| 亚洲国产女人aaa毛片在线| 日韩中文字幕欧美| 亚洲欧美另类人妖| 亚洲变态欧美另类捆绑| 国产va免费精品高清在线观看| 亚洲性xxxx| 久久色在线播放| 亚洲天堂2020| 国产自产女人91一区在线观看| 亚洲成人精品在线| 97国产在线观看| 国产欧美日韩精品丝袜高跟鞋| 欧美一乱一性一交一视频| 精品视频www| 久久久久久这里只有精品| 久久精品视频在线观看| 亚洲乱码国产乱码精品精天堂| 久久久久久亚洲精品不卡| 久久久亚洲福利精品午夜| 亚洲国产精品久久久| 亚洲综合成人婷婷小说| 国产精品久久久91| 亚洲最大成人免费视频| 亚洲美女av在线播放| 久久国产精品久久精品| 青青草99啪国产免费| 亚洲自拍中文字幕| 日韩av一区二区在线观看| 久久这里有精品视频| 国产精品永久免费视频| 亚洲成人黄色网| 日韩成人中文字幕在线观看| 亚洲第一男人av| 久久精品电影一区二区| 中文字幕无线精品亚洲乱码一区| 成人免费在线网址| 疯狂做受xxxx高潮欧美日本| 8x海外华人永久免费日韩内陆视频| 久久久欧美精品| 国产精品视频99| 亚洲电影免费在线观看| 国产欧洲精品视频| 精品av在线播放| 欧美成人性色生活仑片| 中文字幕日韩精品在线| 日韩精品欧美激情| 欧美天堂在线观看| 亚洲天堂网站在线观看视频| 国产在线视频欧美| 北条麻妃一区二区在线观看| 欧美电影在线观看高清| 中文字幕一区二区精品| 精品久久久久久中文字幕大豆网| 亚洲国产精品久久精品怡红院| 国产精品久久久久久久久久久不卡| 日韩精品极品在线观看播放免费视频| 日韩电影免费观看中文字幕| 久久五月天色综合| 亚洲一区第一页| 欧美日韩一区二区三区| 日韩在线观看免费高清完整版| 日韩精品在线视频观看| 国产欧美日韩中文| 欧美日韩激情视频8区| 国产精品入口福利| 最近中文字幕2019免费| 国产成人精品免费久久久久| 欧美视频第一页| 国产视频在线一区二区| 亚洲人午夜精品免费| 国产精品99蜜臀久久不卡二区| 国产精品99久久久久久久久久久久| 日韩中文字幕av| 国产精品揄拍500视频| 一区二区三区国产在线观看| 亚洲娇小xxxx欧美娇小| 黑人巨大精品欧美一区二区免费| 亚洲变态欧美另类捆绑| 久久高清视频免费| 在线观看日韩专区| zzijzzij亚洲日本成熟少妇| 日本aⅴ大伊香蕉精品视频| 日韩精品中文字幕在线播放| 国产精品精品久久久久久| 欧美大片免费看| 一本一本久久a久久精品综合小说| 欧美亚洲国产精品| www.久久久久久.com| 久久久日本电影| 成人h视频在线观看播放| 日本精品视频网站| 97视频在线观看视频免费视频| 欧美在线视频免费观看| 中文字幕免费国产精品| 日韩精品免费看| 九九精品在线播放| 一二美女精品欧洲| 精品爽片免费看久久| 国产一区二中文字幕在线看| 视频直播国产精品| 欧美另类在线观看| 亚洲激情久久久| 国产精品伦子伦免费视频| 国产午夜精品麻豆| 亚洲综合在线播放| 久久久久久伊人| 国产精品扒开腿爽爽爽视频| 国产午夜精品视频免费不卡69堂| 81精品国产乱码久久久久久| 国产精品中文字幕在线| 日韩欧美精品中文字幕| 亚洲综合视频1区| 久久久免费高清电视剧观看| 亚洲国产美女精品久久久久∴| 久久久久久久激情视频| 国模私拍一区二区三区| 欧美日韩成人在线观看| 亚洲在线一区二区| 亚洲图片欧美日产| 欧美激情一区二区久久久| 成人国产精品久久久久久亚洲| 韩曰欧美视频免费观看| 国产精品久久色| 精品人伦一区二区三区蜜桃网站| 另类视频在线观看| 91视频免费网站| 国产精品美女av| 亚洲国产精品国自产拍av秋霞| 欧美日韩国产精品专区| 亚洲精品国产综合区久久久久久久| 欧美日韩国产成人| 国产伦精品一区二区三区精品视频| 国内精品久久久久久久久| 亚洲人a成www在线影院| 91免费欧美精品| 亚洲男人的天堂在线播放| 精品久久久久久中文字幕一区奶水| 国产精品夜色7777狼人| 亚洲第一网中文字幕| 日韩精品小视频| 亚洲最大激情中文字幕| 亚洲精品日韩av| 色偷偷av亚洲男人的天堂| 伦理中文字幕亚洲| 在线视频欧美日韩精品| 国产精品美女午夜av|