⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 testframefwd.cpp

📁 机器人程序
💻 CPP
字号:
// test frame forwarding


#include <stdio.h>
#include <windows.h>
#include "../maviscomm.h"


void writeBmp(BYTE * frameBuf, FrameSize_t fs, const char * filename);


int main(int argc, char** argv)
{
	FrameSize_t       fs;
	HINSTANCE         mavisLib         = NULL;
	GETFRAMESIZEPROC  procGetFrameSize = NULL;
	GETFRAMEPROC      procGetFrame     = NULL;

	mavisLib = LoadLibrary("mavisclient");
	if(!mavisLib)
	{
		fprintf(stderr, "Can't load dll");
		return -1;
	}
	procGetFrameSize = (GETFRAMESIZEPROC)GetProcAddress(mavisLib, GETFRAMESIZEPROC_NAME);
	procGetFrame     = (GETFRAMEPROC)GetProcAddress(mavisLib, GETFRAMEPROC_NAME);

	procGetFrameSize(&fs);
	printf("h = %d, w = %d, bufSize = %d, nPixels = %d\n", fs.height, fs.width, fs.nBufSize, fs.nPixels);


	BYTE * buf = new BYTE[fs.nBufSize];
	if( procGetFrame(buf, fs.nBufSize) )
		printf("failed to get frame data\n");
	else
		writeBmp(buf, fs, "myfile.bmp");

	int count = 0;
	for(int i=0; i<fs.nBufSize; i++) if(buf[i]) ++count;
	printf("count = %d\n", count);

	if(mavisLib) FreeLibrary(mavisLib);
	delete[] buf;


	return 0;
}


void writeBmp(BYTE * frameBuf, FrameSize_t fs, const char * filename)
{
	// Create the bitmap file
	HANDLE hf = CreateFile(
		filename,
		GENERIC_WRITE,
		FILE_SHARE_READ,
		NULL,
		CREATE_ALWAYS,
		NULL,
		NULL
	);

	if( INVALID_HANDLE_VALUE == hf )
	{
		int err = GetLastError();
		printf("Can\'t create file %s: %s", filename, strerror(err));
		return;
	}

	// Write out the bitmap file header
    BITMAPFILEHEADER bfh;
    memset( &bfh, 0, sizeof( bfh ) );
    bfh.bfType    = 'MB';
    bfh.bfSize    = sizeof( bfh ) + fs.nBufSize + sizeof( BITMAPINFOHEADER );
    bfh.bfOffBits = sizeof( BITMAPINFOHEADER ) + sizeof( BITMAPFILEHEADER );
	DWORD written = 0;
    WriteFile( hf, &bfh, sizeof( bfh ), &written, NULL );

	// Write the bitmap format information
    BITMAPINFOHEADER bih;
    memset( &bih, 0, sizeof( bih ) );
    bih.biSize     = sizeof( bih );
    bih.biWidth    = fs.width;
    bih.biHeight   = fs.height;
    bih.biPlanes   = 1;
    bih.biBitCount = 24;
    written = 0;
    WriteFile( hf, &bih, sizeof( bih ), &written, NULL );

	// Write the bitmap bits
    written = 0;
    WriteFile( hf, frameBuf, fs.nBufSize, &written, NULL );


	// release resources
    CloseHandle( hf );
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -