a亚洲精品_精品国产91乱码一区二区三区_亚洲精品在线免费观看视频_欧美日韩亚洲国产综合_久久久久久久久久久成人_在线区

首頁 > 系統 > Android > 正文

Android模擬器中窗口截圖存成文件實現思路及代碼

2020-04-11 12:32:48
字體:
來源:轉載
供稿:網友

Android模擬器內容是用OpenGL渲染的,所以用一般的編程截圖(如PrintWindow()等)會是黑屏。這是因為畫的東西放在framebuffer里。

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

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

首先定義每次framebuffer更新時的回調函數

復制代碼 代碼如下:

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;
}

然后把這個回調函數注冊上去,比如在OpenGL窗口顯示之后:
復制代碼 代碼如下:

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的更新時,guest的屏幕都會存成一張bmp圖片,這和用/dev/graphics/fb0的效果是一樣的。

注意用以上方法截下來的圖和原圖有兩點不同,一是Blue和Red通道互換,這是因為framebuffer是RGB,bmp格式里是BGR。還有就是y軸的零點是左下角,這是由于framebuffer中是OpenGL的坐標系。也就是說,要得到原圖還要經過RGB到BGR的轉換和y-inversion。建議到處理圖片時再做這些處理,一方面不會拖慢模擬器速度,另一方面像OpenCV里有現成的函數可供調用。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 99精品欧美一区二区三区 | 欧美日韩福利视频 | av福利在线观看 | 欧美午夜一区二区三区免费大片 | 欧美成人一区二区三区片免费 | 欧美成人在线网站 | 色人人| 欧美精品在线观看 | 日本狠狠操 | 最新中文字幕 | 五月激情综合 | 日本中文字幕免费 | 天天天干干干 | 成人性生交大片免费看中文带字幕 | 国产乱码精品一区二区三区av | 色福利影院 | 日韩电影免费观 | 伊人网页 | 精品国产一区二区三区粉芽 | 一区二区视频网 | 日韩成人在线观看视频 | 波多野结衣中文字幕在线视频 | 一区二区三区在线播放 | 91久久精品一区二区别 | 免费观看羞羞视频网站 | 欧美综合色 | 久久99国产精品久久99大师 | 日韩高清中文字幕 | 国产精品美女www爽爽爽软件 | 日韩一区二区在线观看视频 | 国产综合精品 | 国产精品理论在线观看 | 国产成人精品一区 | 激情开心站 | www.99热| 欧美视频成人 | 久久久91精品国产一区二区三区 | 中文字幕91 | 欧美一级免费观看 | 亚洲激情av | 国产在线精品一区二区 |