最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Android模擬器中窗口截圖存成文件實(shí)現(xiàn)思路及代碼

 更新時(shí)間:2013年01月22日 09:57:14   作者:  
Android模擬器內(nèi)容是用OpenGL渲染的,所以用一般的編程截圖(如PrintWindow()等)會(huì)是黑屏。這是因?yàn)楫嫷臇|西放在framebuffer里 接下來介紹如何實(shí)現(xiàn)Android模擬器中窗口截圖存成文件,感興趣的朋友可以了解下哦

Android模擬器內(nèi)容是用OpenGL渲染的,所以用一般的編程截圖(如PrintWindow()等)會(huì)是黑屏。這是因?yàn)楫嫷臇|西放在framebuffer里。

一種方法是通過adb把guest的framebuffer數(shù)據(jù)/dev/graphics/fb0倒到host,再轉(zhuǎn)為圖片。但這樣速度比較慢。

好在Android模擬器中把guest的framebuffer傳到host進(jìn)行顯示,所以在host端只要將framebuffer輸出到文件即可。

首先定義每次framebuffer更新時(shí)的回調(diào)函數(shù)

復(fù)制代碼 代碼如下:

void zjin_fb_update(void* context,
int w, int h, int ydir,
int format, int type,
unsigned char* pixels)
{
#define CHANNEL 4
BITMAPFILEHEADER bf;
BITMAPINFOHEADER bi;
int width = w;
int height = h;
FILE *file = fopen("capture.bmp", "wb");
if( file!=NULL )
{
memset( &bf, 0, sizeof( bf ) );
memset( &bi, 0, sizeof( bi ) );
bf.bfType = 'MB';//BM?
bf.bfSize = sizeof(bf)+sizeof(bi)+width*height*CHANNEL;
bf.bfOffBits = sizeof(bf)+sizeof(bi);
bi.biSize = sizeof(bi);
bi.biWidth = width;
bi.biHeight = height;
bi.biPlanes = 1;
bi.biBitCount = 8 * CHANNEL;
bi.biSizeImage = width*height*CHANNEL;
fwrite( &bf, sizeof(bf), 1, file );
fwrite( &bi, sizeof(bi), 1, file );
fwrite( pixels, sizeof(unsigned char), height*width*CHANNEL, file );
fclose( file );
}
return;
}

然后把這個(gè)回調(diào)函數(shù)注冊(cè)上去,比如在OpenGL窗口顯示之后:
復(fù)制代碼 代碼如下:

android_showOpenglesWindow(winhandle, drect.pos.x, drect.pos.y,
drect.size.w, drect.size.h, disp->rotation * -90.);
android_setPostCallback(zjin_fb_update, NULL);

這樣,每次有framebuffer的更新時(shí),guest的屏幕都會(huì)存成一張bmp圖片,這和用/dev/graphics/fb0的效果是一樣的。

注意用以上方法截下來的圖和原圖有兩點(diǎn)不同,一是Blue和Red通道互換,這是因?yàn)閒ramebuffer是RGB,bmp格式里是BGR。還有就是y軸的零點(diǎn)是左下角,這是由于framebuffer中是OpenGL的坐標(biāo)系。也就是說,要得到原圖還要經(jīng)過RGB到BGR的轉(zhuǎn)換和y-inversion。建議到處理圖片時(shí)再做這些處理,一方面不會(huì)拖慢模擬器速度,另一方面像OpenCV里有現(xiàn)成的函數(shù)可供調(diào)用。

相關(guān)文章

最新評(píng)論

会宁县| 邵阳市| 海宁市| 象州县| 安庆市| 英吉沙县| 莱州市| 天祝| 屏东市| 泽州县| 凯里市| 昌宁县| 阳高县| 周口市| 秭归县| 四川省| 海原县| 龙口市| 高碑店市| 赤峰市| 芜湖市| 凤台县| 行唐县| 玛多县| 堆龙德庆县| 麦盖提县| 高要市| 临颍县| 黄大仙区| 法库县| 安平县| 团风县| 沁源县| 邛崃市| 仪征市| 巫山县| 新郑市| 通海县| 尉氏县| 新泰市| 保康县|