使用位圖
加載和檢查位圖:Bitmap類我們可通過BitmapFactory單元素就可以從文件加載位圖。
由於我們將圖像以資源形式儲存,因此我們從assets/目錄加載一幅圖像。
InputStream inputStream = assetManager.open("bob.png");
Bitmap bitmap = BitmapFactory.decodeStream(inputStream);
我們可以通過一下方法獲取圖像的像素寬度和高度:
int width = bitmap.getWidth();
int height = bitmap.getHeight();
接下來我們想知道是以什麼樣的顏色格式來存儲位圖:
Bitmap.Config config = bitmap.getConfig();
Bitmap.Config是一個枚舉,其值如下:
Config.ALPHA_8 Config.ARGB_4444 Config.ARGB_8888 Config.RGB_565
我們可嘗試使用BitmapFactory以一個特定的顏色格式來加載一幅圖像,甚至是它的原始格式不同。
InputStream inputStream = assetManager.open("bob.png");
BitmapFactory.Options options = new BitmapFactory.Options();
options.inPreferredConfig = Bitmap.Config.ARGB_4444;
Bitmap bitmap = BitmapFactory.decodeStream(inputStream, null, options);
我們可以通過BitmapFactory.Options.inPreferredConfig成員來為Bitmap實例指定一個所需的顏色格式。在這裡,bob.png文件是ARGB888格式的PNG圖像,我們可通過BitmapFactory加載它並將其轉換成ARGB444位圖。
也可以使用下面的靜態方法來創建一個空的Bitmap實例:
Bitmap bitmap = Bitmap.createBitmap(int width, int height, Bitmap.Config config);
Canvas類也可以操作位圖:
Canvas canvas = new Canvas(bitmap);
我們通過下面辦法釋放任何不再需要的位圖:
Bitmap.recycle();
一旦我們加載位圖,就可以通過Canvas來繪制,最簡單的辦法如下:
canvas.drawBitmap(Bitmap bitmap, float topLeftX, float topLeftY, Paint paint);
第二和第三個參數用於指定位圖位於屏幕左上角的坐標。最後一個參數可以設置為null,也可以通過Paint來指定一下高級的繪制參數。
還有一個方法:
canvas.drawBitmap(Bitmap bitmap, Rect src, Rect dst, Paint paint);
這個方法非常有用,它允許我們通過第二個參數繪制指定的部分為圖。Rect類保存一個矩形的左上角和右下角坐標。當我們通過第二個參數src來指定部分位圖時,將會在位圖的坐標系統內進行繪制,如果指定為null,那麼將使用整個位圖。
第三個參數定義了部分為圖將要繪制在什麼地方,同樣采用Rect實例的形式。不過這一次的角坐標將通過Canvas上的目標對象的坐標系統來給定(一個視圖或者另一個視圖)。無論目標矩形比源矩形大還是小,Canvas都會做出調整。最後一個參數通常設置為null。不過這個縮放代價很大,只有在絕對必要的時候使用它。