C++Builder XE

Matrox Solios采集卡采集图像示例

前言

本文主要讲解如何在C++Builder XE的开发环境上搭建MIL,实现控制Solios采集卡进行图像采集


正文

一、MIL是什么?

MIL是Matrox公司为Solios采集卡开发的配套驱动程序,里面包含功能强大的图像采集函数库Mil-Lite(基本控制库)和Mil(模式识别库),另外还提供了专为控制图像采集、传输、处理、分析及显示而集成的Active Mil和Active Mil-Lite控件,支持在VC、VC++、VB、Borland C/C++下调用。

二、如何使用MIL?

1.安装采集卡驱动

直接双击setup.exe程序,按照引导一直next,直至安装完成即可。
在这里插入图片描述
注意:博主安装的是32bit MIL-Lite 9 R2 build 1950,若要完整安装教程,可以参考 [青山笑我依旧在](https://blog.csdn.net/qq_23107577/article/details/120365952) 博主写的文章

2.设置环境变量

假设安装目录为 D:\Program Files (x86)\Matrox Imaging

① 打开环境变量
此电脑 -> 属性 -> 高级系统设置 -> 高级 -> 环境变量
② 新增路径到Path下
双击系统变量下的Path变量,添加以下路径
D:\Program Files (x86)\Matrox Imaging\Mil\DLL

3.C++Builder XE环境设置

① 新建VCL Forms Application工程
② Project -> Options -> Directories and Conditionals
在Include path添加以下头文件路径
D:\Program Files (x86)\Matrox Imaging\Mil\Include
D:\Program Files (x86)\Matrox Imaging\Mil\Include\MilDyn
在这里插入图片描述

在Library path添加静态库文件路径
D:\Program Files (x86)\Matrox Imaging\Mil\LIB
在这里插入图片描述
③直接将Mil.lib添加到工程里
在这里插入图片描述
注意:C++Builder XE直接调用VC开发的库文件会报以下错误,解决方法是使用C++Builder XE自带的implib.exe 将vc的dll转换成bcb支持的lib即可使用,具体命令如下
implib.exe /f D:\Output\BCBFormat\LIB\Mil.lib D:\Program Files (x86)\Matrox Imaging\Mil\DLL\Mil.dll
在这里插入图片描述

4.示例代码


#include <Mil.h>
MIL_ID MilSys = M_NULL;
MIL_ID MilApp = M_NULL;
MIL_ID MilImage = M_NULL;
MIL_ID MilDigit = M_NULL;
MIL_ID MilDisplay = M_NULL;
char DCF_PATH[]="solcl_mil80_XCL-C500_8bit_2tap_c.dcf";//INPUT DCF PATH
char destPath[]="D:\\Log\\output\\test.tiff";

void MilCaptureTestDemo(){
	ShowMessage("初始化");
		MappAllocDefault(M_SETUP,&MilApp,&MilSys,M_NULL,M_NULL,M_NULL);
        //分配采集器
        MdigAlloc(MilSys,M_DEFAULT,(MIL_API_CONST_TEXT_PTR)DCF_PATH,M_DEFAULT,&MilDigit) ;
		//分配buffer
	ShowMessage("分配内存");
        long imgx,imgy,imgtype;
        imgx = MdigInquire(MilDigit,M_SIZE_X,M_NULL);
        imgy = MdigInquire(MilDigit,M_SIZE_Y,M_NULL);
        imgtype= MdigInquire(MilDigit,M_TYPE,M_NULL);
        MbufAlloc2d(MilSys,imgx,imgy,imgtype,M_DISP+M_GRAB+M_IMAGE,&MilImage);
        MbufClear(MilImage,0);
	ShowMessage("采集");
		AnsiString destPath=ExtractFilePath(Application->ExeName)+"test."+Edit_Suffx->Text;
		MdigGrab(MilDigit,MilImage);//采集单帧画面

		if(MilImage!=M_NULL){

			MbufSave(destPath.c_str(),MilImage);
			Image1->Picture->LoadFromFile(destPath);
            MbufFree(MilImage);
			ShowMessage("保存成功!");
		}

        if(MilDigit!=M_NULL){
            MdigFree(MilDigit);
        }

        if(MilApp!=M_NULL)
                MappFreeDefault(MilApp,MilSys,MilDisplay,M_NULL,M_NULL);

}


总结

通过以上的步骤说明,相信大家已经对如何在BCB环境上搭建使用MIL API有一个初步了解,借用诗人陆游的话来说,“纸上得来终觉浅,绝知此事要躬行”,大家可以亲自动手实验下,印象会更加深刻。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
C++Builder XE6可以使用OpenSSL库进行AES加密,并且支持设置偏移量(IV)。以下是一个示例代码: ```c++ #include <openssl/aes.h> #include <cstring> // 加密函数 void aes_encrypt(const unsigned char *plaintext, int plaintext_len, const unsigned char *key, const unsigned char *iv, unsigned char *ciphertext) { AES_KEY aes_key; AES_set_encrypt_key(key, 128, &aes_key); AES_cbc_encrypt(plaintext, ciphertext, plaintext_len, &aes_key, iv, AES_ENCRYPT); } // 解密函数 void aes_decrypt(const unsigned char *ciphertext, int ciphertext_len, const unsigned char *key, const unsigned char *iv, unsigned char *plaintext) { AES_KEY aes_key; AES_set_decrypt_key(key, 128, &aes_key); AES_cbc_encrypt(ciphertext, plaintext, ciphertext_len, &aes_key, iv, AES_DECRYPT); } int main() { const unsigned char *plaintext = (unsigned char *)"Hello World!"; const unsigned char *key = (unsigned char *)"0123456789abcdef"; const unsigned char *iv = (unsigned char *)"1234567890abcdef"; unsigned char ciphertext[16]; unsigned char decryptedtext[16]; // 加密 aes_encrypt(plaintext, strlen((char *)plaintext), key, iv, ciphertext); // 解密 aes_decrypt(ciphertext, 16, key, iv, decryptedtext); // 输出结果 printf("Plaintext: %s\n", plaintext); printf("Ciphertext: "); for (int i = 0; i < 16; i++) printf("%02x", ciphertext[i]); printf("\nDecryptedtext: %s\n", decryptedtext); return 0; } ``` 在这个示例中,我们使用了`AES_set_encrypt_key`和`AES_set_decrypt_key`函数设置加密和解密所需的密钥,使用`AES_cbc_encrypt`函数进行加密和解密,并且传入了偏移量(IV)。注意,偏移量的长度必须与块长度相同,对于AES-128算法,块长度为128位,偏移量长度也为128位。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值