generateBitmap 函式分析

2021-06-28 16:29:57 字數 1758 閱讀 5837

static bitmap generatebitmap(bitmap bm, int width, int height) 

bm.setdensity(displaymetrics.density_device);

if (width <= 0 || height <= 0

|| (bm.getwidth() == width && bm.getheight() == height))

// this is the final bitmap we want to return.

try else

targetrect.right = (int)(targetrect.right*scale);

targetrect.bottom = (int)(targetrect.bottom*scale);

deltaw = width - targetrect.right;

deltah = height - targetrect.bottom;

}targetrect.offset(deltaw/2, deltah/2);

paint paint = new paint();

paint.setfilterbitmap(true);

paint.setxfermode(new porterduffxfermode(porterduff.mode.src));

c.drawbitmap(bm, null, targetrect, paint);

bm.recycle();

c.setbitmap(null);

return newbm;

} catch (outofmemoryerror e)

}

該函式是生成乙個固定大小 width * height 的 bitmap 影象,源影象是由引數bm傳遞進來的 bitmap 影象。

以系統自帶桌布為例,它們的解析度都是1920*1280的,假如這裡傳入的引數width=800,,height=600,其實這裡的width和height都是從檔案/data/system/wall*****_info.xml中讀取到的,

/data/system # cat wall*****_info.xml                             

<?xml version='1.0' encoding='utf-8' standalone='yes' ?>

我們先建立乙個width*height大小的空影象,這也是最終要返回的,

bitmap newbm = bitmap.createbitmap(width, height, bitmap.config.argb_8888);

接下來,進行的就是裁切工作,

根據**流程,首先是定義了原始區域,即藍色虛框

targetrect.right = bm.getwidth();

targetrect.bottom = bm.getheight();

然後進行偏移,即紅色虛框

targetrect.offset(deltaw/2, deltah/2);

然後在可見的虛框區域,裁剪出指定的大小

c.drawbitmap(bm, null, targetrect, paint);

這個時候的targetrect已經向左上方偏移了,可見區域變小,c是乙個canvas變數,類似定義了大小的一塊畫布,這塊畫布就是綠色區域標識的部分。

**是按照上述方式實現的,但邏輯上,其實就是

居中擷取原始影象

WaitForSingleObject函式的使用

程式舉例 1 建立對話方塊應用程式,專案名稱為mytestthread 2 新增按鈕,命名為啟動和停止,在對話方塊中增加編輯框,id為idc time,3 增加成員變數,handle m hthread 2 此為執行緒的控制代碼 4 定義全域性變數,用來控制線程的執行與否 volatile bool...

cvCreateVideoWriter函式使用

cvcreatevideowriter函式使用 2011 11 04 15 47 例如,cv fourcc p i m 1 是mpeg 1 codec,cv fourcc m j p g 是motion jpeg codec cv fourcc m p 4 2 mpeg 4.2 codec cv f...

CentimetersToPoints函式出錯

在word開發中,碰到centimeterstopoints函式呼叫出錯,提示未指定的錯誤的問題。解決辦法為修改centimeterstopoint函式 匯入msword.olb後的centimeterstopoint函式如下 修改後的centimeterstopoint函式如下,紅色表示的部分為增...