Android基礎第九天易忘部分(載入大圖片和縮放圖片)
1.載入大圖片到記憶體
/**
* 縮小大圖片的原理:
* 本來大圖片某一塊大小由100個畫素點來進行顯示,並且這100個畫素點顏色差不多
* 那麼現在這100個畫素點因為顏色差不多,所以由1個畫素點來代替
* 這樣就實現了圖片縮小顯示的功能
*
*
* 載入大圖片到記憶體思路:
* 獲取到圖片的寬高(注意不要載入到記憶體),然後用圖片的寬高除以手機的寬高,以大的值為縮放比例(當然要判斷圖片解析度是要大於手機解析度的)
* 然後計算出縮放後的圖片寬高,再載入到記憶體裡
*/
public class MainActivity extends Activity {
private ImageView iv;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
init();
}
private void init() {
iv = (ImageView) findViewById(R.id.iv);
}
public void loadImg (View view) {
//這種載入圖片的方式是根據圖片的解析度來分配記憶體空間的,一旦圖片解析度大於螢幕的就要出記憶體溢位異常
/*Bitmap bitmap = BitmapFactory.decodeFile("/mnt/sdcard/a.jpg");
iv.setImageBitmap(bitmap);*/
WindowManager windowManager = getWindowManager();
Display defaultDisplay = windowManager.getDefaultDisplay();
int width = defaultDisplay.getWidth(); //手機螢幕的寬度
int height = defaultDisplay.getHeight(); //手機螢幕的高度
System.out.println("螢幕width:"+width);
System.out.println("螢幕height:"+height);
Options opts = new Options();
opts.inJustDecodeBounds = true; //不要直接載入圖片到記憶體,而只是載入一些圖片的資訊(比如寬度高度資訊)這樣就不會記憶體溢位了
Bitmap bitmap = BitmapFactory.decodeFile("/mnt/sdcard/a.jpg", opts );
int outWidth = opts.outWidth; //圖片的寬度
int outHeight = opts.outHeight; //圖片的高度
System.out.println("圖片outWidth:"+outWidth);
System.out.println("圖片outHeight:"+outHeight);
int dx = outWidth/width;
int dy = outHeight/height;
int scale = 1;
if(dx>dy&&dy>1){
scale = dx;
System.out.println("按照水平方法縮放,縮放比例:"+dx);
}else if(dy>dx&&dx>1){
scale = dy;
System.out.println("按照垂直方法縮放,縮放比例:"+dy);
}
opts.inSampleSize = scale; //設定縮放比例
opts.inJustDecodeBounds = false; //直接載入圖片到記憶體,而不只是載入圖片資訊
bitmap = BitmapFactory.decodeFile("/mnt/sdcard/a.jpg", opts);
iv.setImageBitmap(bitmap);
}
}
/**
* 這個縮放是建立在拷貝原圖的基礎上再進行縮放的
* 和載入大圖片到記憶體還是有區別的
*/
public class MainActivity extends Activity {
private ImageView iv1;
private ImageView iv2;
private Bitmap srcBitmap; //原圖
private Bitmap copyBitmap; //拷貝後的圖
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
init();
}
private void init() {
iv1 = (ImageView) findViewById(R.id.iv1);
srcBitmap = BitmapFactory.decodeResource(getResources(), R.drawable.ic_launcher); //原圖
iv1.setImageBitmap(srcBitmap);
iv2 = (ImageView) findViewById(R.id.iv2);
//根據原圖的長寬和原圖配置,建立一個相同尺寸的拷貝圖片畫布 第三個引數Config.ARGB_4444 Config.ARGB_8888
copyBitmap = Bitmap.createBitmap(2*srcBitmap.getWidth(), 2*srcBitmap.getHeight(), srcBitmap.getConfig());
}
public void copy (View view) {
Canvas canvas = new Canvas(copyBitmap); //建立畫板,設定那個空白的畫布
Paint paint = new Paint(); //準備一個畫筆
paint.setColor(Color.BLACK); //設定畫筆預設的顏色(可選)
paint.setStrokeWidth(10); //設定畫筆的粗細(可選)
Matrix matrix = new Matrix();
/*x = 1x + 0y + 0z
y = 0x + 1y + 0z
z = 0x + 0y + 1z*/
//這個是底層的方法,最終呼叫的還是此方法
/*matrix.setValues(new float[]{
1,0,0, //長
0,1,0, //寬
0,0,1 //
});*/
//matrix.setScale(0.5f, 0.5f); //X和Y方向都為原先的2分之1
matrix.setScale(2.0f, 2.0f); //X和Y方向都為原先的2倍,那麼畫布的長寬也要設定成原先的2倍
canvas.drawBitmap(srcBitmap, matrix , paint); //畫畫 引數一:被臨摹的圖 引數二:縮放比,只new Matrix()就表示不變 引數三:畫筆
iv2.setImageBitmap(copyBitmap);
}
}
相關文章
- Android 載入大圖片,不壓縮圖片Android
- Android 圖片縮放Android
- AlamofireImage 使用 – swift載入網路圖片,縮放圖片,生成圓形圖片Swift
- Android 基礎之圖片載入(二)Android
- Android:ImageView圖片縮放、居中AndroidView
- 要優雅!Android中這樣載入大圖片和長圖片Android
- android imageview 縮放檢視圖片AndroidView
- 實現圖片縮放
- 圖片操作系列 —(1)手勢縮放圖片功能
- Android 高清載入巨圖方案 拒絕壓縮圖片Android
- SwiftUI圖片處理(縮放、拼圖)SwiftUI
- html 圖片按比例縮放HTML
- 開源圖片工具箱(Img Toolbox) 格式轉換 新增水印 圖片壓縮 圖片裁剪 圖片旋轉 圖片縮放
- Android 圖片載入框架Android框架
- android 載入大量圖片Android
- Android壓縮圖片後再上傳圖片Android
- HTML5 圖片縮放功能HTML
- 等比例縮放圖片 jsJS
- 圖片預載入和懶載入
- Android 高效安全載入圖片Android
- ugui 縮放圖片使圖片的四個角和四邊保持原樣UGUI
- JS控制圖片顯示的大小(圖片等比例縮放)JS
- android下圖片壓縮Android
- opencv 圖片幾何變換-縮放OpenCV
- 圖片等比例縮放程式碼
- Flutter 圖片載入Flutter
- 圖片懶載入
- 預載入圖片
- 圖片載入事件事件
- 載入圖片方式
- android glide圖片載入框架AndroidIDE框架
- Android 載入網路圖片 以及實現圓角圖片效果Android
- Android-壓縮大圖到容量超小的圖片Android
- Qt基礎——獲取QGraphicsScene的縮圖即匯出到圖片QTCSS
- 圖片預載入,圖片懶載入,和jsonp中的一個疑問JSON
- ios 圖片部分截圖iOS
- Android 你還在為圖片放哪兒糾結嗎?圖片資原始檔夾載入規律Android
- Android 超高仿微信圖片選擇器 圖片該這麼載入Android