Bitmap, sử dụng hình ảnh là việc không tránh khỏi
May 14, 2017 16:18:10 GMT 7
hoichemgio9x likes this
Post by Admin on May 14, 2017 16:18:10 GMT 7
Bitmap
Hình ảnh sử dụng trong ứng dụng android gọi là Bitmap, trong Window cũng vậy, có lẽ bạn nên quan tâm nhiều hơn vấn đề sử dụng hình ảnh chuyên sâu, vì đối với những chương trình, việc tạo một Bitmap tốn nhiều tài nguyên của máy.
Đáng lẽ tôi nên nói đến việc sử dụng Bitmap từ đầu, nhưng không, nó không phải đơn giản như bạn nghĩ. Có nhiều cách sử dụng Bitmap, việc khởi tạo nó cũng là 1 chuyện, bạn sẽ phải quan tâm đến 2 thư mục trong project của mình, đó là res và assets.
Thông thường thư mục res cung cấp cho chúng ta những đối tượng cơ bản để chúng ta sử dụng, như layout.xml, drawable, value, và menu. Mỗi thư mục con trong res chứa loại mà nó có thể được ứng dụng sử dụng thông qua id, (id là 1 giá trị nguyên, tự động cập nhật khi bạn thêm đối tượng vào thư mục res), tuy nhiên gọi đối tượng thông qua tên của nó cũng được dùng, ví dụ: bạn có hình ảnh “logo.png” đặt trong thư mục drawable, bạn gọi id của nó là “logo”, không cần thêm phần đuôi “.png” làm gì, vì chương trình tự động đặt id là phần tên của đối tượng mà không dùng phần đuôi. Cho nên các đối tượng có cùng tên khác đuôi sẽ làm tôi điên lên.
Tương tự như vậy, các thư mục khác cũng dùng id để quản lý các đối tượng, khi bạn dùng 1 layout, bạn không cần phải gọi “abx.xml” mà chỉ dọi “abx”…
Đó là lý do tôi không dùng đến layout, hoặc hình ảnh đặt trong res… mà tôi dùng code để định dạng ứng dụng, và dùng assets để đặt tất cả file tôi cần thiết vào đó.
Ví dụ: bạn tạo 1 bitmap từ file logo.jpg đặt trong res folder như sau:
Bitmap bm=BitmapFactory.decodeResource(getResources(),R.drawable.logo);
ở trên chúng ta cần 2 tham số, hàm .getResources() sẽ trả về quản lý thư mục Resources, phía sau là id của đối tượng hình ảnh, đặt trong thư mục drawable.
* Sử dụng AssetManager
Để sử dụng file trong assets, bạn cần gọi quản lý assets thông qua hàm .getAssets(), hàm này tạo ra AssetManager và thông qua hàm .open(filename) chúng ta sẽ nhanh chóng được trả về InputStream của file, lúc này việc đọc file là rất dễ dàng.
Tiếp đó, chúng ta sẽ dùng BitmapFactory để tổng hợp hình ảnh bitmap thông qua hàm .decodeStream(InputStream), tất nhiên còn nhiều hàm tổng hợp khác, bạn tự tìm hiểu.
Sau đây là 1 ví dụ về ImageView, một View dùng để nắm giữ Bitmap và hiện thị được ra ngoài.
Theo dõi ví dụ và thực hành là cách nhanh nhất nắm được nguyên lý hoạt động của nó.
Hình ảnh sử dụng trong ứng dụng android gọi là Bitmap, trong Window cũng vậy, có lẽ bạn nên quan tâm nhiều hơn vấn đề sử dụng hình ảnh chuyên sâu, vì đối với những chương trình, việc tạo một Bitmap tốn nhiều tài nguyên của máy.
Đáng lẽ tôi nên nói đến việc sử dụng Bitmap từ đầu, nhưng không, nó không phải đơn giản như bạn nghĩ. Có nhiều cách sử dụng Bitmap, việc khởi tạo nó cũng là 1 chuyện, bạn sẽ phải quan tâm đến 2 thư mục trong project của mình, đó là res và assets.
Thông thường thư mục res cung cấp cho chúng ta những đối tượng cơ bản để chúng ta sử dụng, như layout.xml, drawable, value, và menu. Mỗi thư mục con trong res chứa loại mà nó có thể được ứng dụng sử dụng thông qua id, (id là 1 giá trị nguyên, tự động cập nhật khi bạn thêm đối tượng vào thư mục res), tuy nhiên gọi đối tượng thông qua tên của nó cũng được dùng, ví dụ: bạn có hình ảnh “logo.png” đặt trong thư mục drawable, bạn gọi id của nó là “logo”, không cần thêm phần đuôi “.png” làm gì, vì chương trình tự động đặt id là phần tên của đối tượng mà không dùng phần đuôi. Cho nên các đối tượng có cùng tên khác đuôi sẽ làm tôi điên lên.
Tương tự như vậy, các thư mục khác cũng dùng id để quản lý các đối tượng, khi bạn dùng 1 layout, bạn không cần phải gọi “abx.xml” mà chỉ dọi “abx”…
Đó là lý do tôi không dùng đến layout, hoặc hình ảnh đặt trong res… mà tôi dùng code để định dạng ứng dụng, và dùng assets để đặt tất cả file tôi cần thiết vào đó.
Ví dụ: bạn tạo 1 bitmap từ file logo.jpg đặt trong res folder như sau:
Bitmap bm=BitmapFactory.decodeResource(getResources(),R.drawable.logo);
ở trên chúng ta cần 2 tham số, hàm .getResources() sẽ trả về quản lý thư mục Resources, phía sau là id của đối tượng hình ảnh, đặt trong thư mục drawable.
* Sử dụng AssetManager
Để sử dụng file trong assets, bạn cần gọi quản lý assets thông qua hàm .getAssets(), hàm này tạo ra AssetManager và thông qua hàm .open(filename) chúng ta sẽ nhanh chóng được trả về InputStream của file, lúc này việc đọc file là rất dễ dàng.
Tiếp đó, chúng ta sẽ dùng BitmapFactory để tổng hợp hình ảnh bitmap thông qua hàm .decodeStream(InputStream), tất nhiên còn nhiều hàm tổng hợp khác, bạn tự tìm hiểu.
Sau đây là 1 ví dụ về ImageView, một View dùng để nắm giữ Bitmap và hiện thị được ra ngoài.
package com.holyeyed.ctrbitmap;
import java.io.InputStream;
import android.app.Activity;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.os.Bundle;
import android.widget.ImageView;
import android.widget.ImageView.ScaleType;
public class MainActivity extends Activity {
ImageView im;
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//khởi tạo ImageView
im=new ImageView(this);
//Tạo một bitmap hình ảnh
Bitmap bm=create("heart.png");
//đặt hình ảnh này lên ImageView
im.setImageBitmap(bm);
//Định kiểu xuất hiện của ImageView, ở đây không cho hình ảnh tự động vừa màn hình.
im.setScaleType(ScaleType.CENTER);
///cho hiện thị ImageView ra ngoài màn hình
setContentView(im);
}
//hàm tạo một Bitmap từ file được đặt trong Assets thư mục
public Bitmap create(String fn){
try{
//sử dụng quản lý Assets và mở tên file cần đọc
InputStream is=getAssets().open(fn);
//khởi tạo Bitmap từ hàm giải mã dữ liệu đầu vào thông qua class BitmapFactory
Bitmap m=BitmapFactory.decodeStream(is);
//trả lại đối tượng hình ảnh bitmap.
return m;
}catch(Exception e){}
//có lỗi thì trả về null
return null;
}
}
Theo dõi ví dụ và thực hành là cách nhanh nhất nắm được nguyên lý hoạt động của nó.