截图返回字节流 - GetScreenData
函数简介
获取指定区域的图像数据,以二进制数据的方式返回。数据格式为BBGGRRAA(BGRA格式),每个像素占用4字节。此函数比GetScreenDataBmp具有更高的读取效率,适用于需要快速获取屏幕图像数据的场景。
图像尺寸计算:
- 图像宽度 = stride / 4
- 图像高度 = size / stride
当x1, y1, x2, y2参数都传0时,将获取窗口整个客户区的图像。
- 此接口线程不安全无法并发调用(不推荐使用)
- 建议使用GetScreenDataPtr + GetImageData + FreeImagePtr 接口安全读取BMP数据
接口名称
GetScreenData
DLL调用
int GetScreenData(long ola, int x1, int y1, int x2, int y2, long* data, int* size, int* stride)
参数定义:
ola
(长整型数): OLAPlug对象的指针,由 CreateCOLAPlugInterFace 接口生成。x1
(整型数): 区域的左上X坐标y1
(整型数): 区域的左上Y坐标x2
(整型数): 区域的右下X坐标y2
(整型数): 区域的右下Y坐标data
(长整型数指针): 返回图片数据的指针地址size
(整型数指针): 返回图片数据的总长度(字节数)stride
(整型数指针): 返回图片每行数据的字节数
示例:
// 获取指定区域的图像数据
long data = 0;
int size = 0;
int stride = 0;
if (GetScreenData(ola, 0, 0, 800, 600, &data, &size, &stride)) {
// 计算图像尺寸
int width = stride / 4;
int height = size / stride;
// 处理图像数据
unsigned char* imageData = (unsigned char*)data;
// ... 处理图像数据 ...
printf("图像尺寸: %dx%d\n", width, height);
printf("数据大小: %d 字节\n", size);
printf("每行字节数: %d\n", stride);
} else {
printf("获取图像数据失败\n");
}
// 获取整个客户区
if (GetScreenData(ola, 0, 0, 0, 0, &data, &size, &stride)) {
// ... 处理图像数据 ...
}
返回值
整型数:
- 1: 成功获取图像数据
- 0: 获取失败
注意事项
- 数据格式为BBGGRRAA(BGRA格式),每个像素占用4字节
- 图像尺寸可以通过stride和size计算得出
- 获取的数据指针保存在当前对象中,下次调用此接口时会自动释放
- 需要将数据拷贝到自己的字节集中再使用
- 坐标范围必须在有效范围内
- 建议在使用前检查坐标是否有效
- 处理大尺寸图像时注意内存使用
- 数据指针在下次调用前有效
- 如果需要保存图像,建议及时处理数据
- 建议在循环中获取图像时注意内存管理