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函式如下,紅色表示的部分為增...