已知 RGB24 数据、长、宽,如何保存为BMP文件,请具体的讲,最好有代码

aa3000 2004-12-03 04:53:01
已知 RGB24 数据、长、宽,如何保存为BMP文件,请具体的讲,最好有代码
...全文
292 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
DentistryDoctor 2004-12-03
  • 打赏
  • 举报
回复
如果是RGB24/RGB16话,前面是一个文件头,后面就是位数据。
DentistryDoctor 2004-12-03
  • 打赏
  • 举报
回复
CFile fileBmp;
if(fileBmp.Open("Hello.bmp",CFile::modeWrite |CFile::shareExclusive | CFile::modeCreate))
{
BITMAPINFOHEADER fmtFrame = {sizeof(BITMAPINFOHEADER), 0, 0, 1, 24, BI_RGB, 0, 0, 0, 0, 0};
fmtFrame.biWidth = w;
fmtFrame.biHeight = h;
fmtFrame.biSizeImage =(w+3)/4*4*h*3;
BITMAPFILEHEADER fInfo;
ZeroMemory(&fInfo, sizeof fInfo);
fInfo.bfType = 0x4D42;
fInfo.bfOffBits = sizeof(BITMAPFILEHEADER) + sizeof(BITMAPINFOHEADER);
fInfo.bfSize = fInfo.bfOffBits + fmtFrame.biSizeImage;
fileBmp.Write(&fInfo, sizeof fInfo);
fileBmp.Write(&fmtFrame,sizeof(fmtFrame));
fileBmp.Write(pBits,fmtFrame.biSizeImage);
}
fileBmp.Close();
aa3000 2004-12-03
  • 打赏
  • 举报
回复
关键是我不知道 RGB 数据格式和 BMP 文件格式是什么关系.请教
老夏Max 2004-12-03
  • 打赏
  • 举报
回复
我是创建一个随机象素的BMP,RGB值是使用GetRandomRGBValue获得的一个随机数的!
老夏Max 2004-12-03
  • 打赏
  • 举报
回复
参考:
void CCreateRandomBMPDlg::OnBtnCreateBMP()
{
CDC dc;
dc.CreateDC("DISPLAY", NULL, NULL, NULL);
CBitmap bm;
int Width = 800;//GetSystemMetrics(SM_CXSCREEN);
int Height = 600;//GetSystemMetrics(SM_CYSCREEN);
bm.CreateCompatibleBitmap(&dc, Width, Height);
CDC tdc;
tdc.CreateCompatibleDC(&dc);
CBitmap* pOld = tdc.SelectObject(&bm);
tdc.BitBlt(0, 0, Width, Height, &dc, 0, 0, SRCCOPY);
tdc.SelectObject(pOld);

BITMAP btm;
bm.GetBitmap(&btm);
DWORD size = btm.bmWidthBytes* btm.bmHeight;
LPSTR lpData = (LPSTR) GlobalAllocPtr(GPTR, size);
/////////////////////////////////////////////


/////////////////////////////////////////////
BITMAPINFOHEADER bih;
bih.biBitCount = btm.bmBitsPixel;
bih.biClrImportant = 0;
bih.biClrUsed = 0;
bih.biCompression = 0;
bih.biHeight = btm.bmHeight;
bih.biPlanes = 1;
bih.biSize = sizeof(BITMAPINFOHEADER);
bih.biSizeImage = size;
bih.biWidth = btm.bmWidth;
bih.biXPelsPerMeter = 0;
bih.biYPelsPerMeter = 0;
///////////////////////////////////
GetDIBits(dc, bm, 0, bih.biHeight, lpData, (BITMAPINFO *) &bih,
DIB_RGB_COLORS);
// bm.GetBitmapBits(size,lpData); //此函数在处理5-5-5模式的16位色下会出现颜色混乱
//////////////////////////////
//修改RGB值
int nWidth = btm.bmWidth * 4;
for (int i = 0; i < btm.bmHeight; i++)
{
for (int j = 0; j < btm.bmWidth; j++)
{
lpData[i * nWidth + j * 4 + 2] = GetRandomRGBValue(); //R
lpData[i * nWidth + j * 4 + 1] = GetRandomRGBValue(); //G
lpData[i * nWidth + j * 4] = GetRandomRGBValue(); //B
TRACE("\nR = %d; G = %d; B = %d\n",
lpData[i * nWidth + j * 4 + 2],
lpData[i * nWidth + j * 4 + 1], lpData[i * nWidth + j * 4]);
}
}

static int filecount = 0;
CString name;
name = "D:\\Test.bmp";//m_Path+name;
BITMAPFILEHEADER bfh;
bfh.bfReserved1 = bfh.bfReserved2 = 0;
bfh.bfType = ((WORD) ('M' << 8) | 'B');
bfh.bfSize = 54 + size;
bfh.bfOffBits = 54;

CFile bf;
if (bf.Open(name, CFile::modeCreate | CFile::modeWrite))
{
bf.WriteHuge(&bfh, sizeof(BITMAPFILEHEADER));
bf.WriteHuge(&bih, sizeof(BITMAPINFOHEADER));
bf.WriteHuge(lpData, size);
bf.Close();
}
GlobalFreePtr(lpData);
AfxMessageBox("Create BMP File Over!");
}
基于C++的炉石传说机器人.zip ######准备写个炉石传说自动战斗AI,准备采用图像识别技术进行模拟 一些问题: 1.图像的采集 2.图像的查找比较 3.控制鼠标操作 4.识别卡牌费用 test 1 图像的采集 思路: 获取炉石传说程序的句柄 2.通过句柄获取窗口 3.获取窗口像素 查找资料并实验得到有两种方法: 方法一:获取窗口后,使用bitblt函数进行窗口函数拷贝,缺点是窗口不能有遮挡 方法二:使用printWindows 函数获取窗口图像,缺点是该函数是xp下专用,win10上对于有些窗口会无法获取图像,得到黑屏 经测试,炉石传说可以使用第二张方法,代码见test/getWindowsImage.cpp test 2 图像的查找比较 思路: 1.获取当前画面 2.读取待比较bmp 3.比较 已知方法: 方法一:逐像素,判断rgb差值,缺点慢,优点准确 代码见 test/findSubImage.cpp 方法二:采用相似图像比较分方法,比如pHash等,未测试 test 3 控制鼠标操作 思路: 1.获取目标窗口句柄 2.给目标窗口发送消息 3.获取鼠标在窗口的位置 已知方法: 方法一:使用sendMessage 或者postMessage函数向炉石程序发送消息 方法二:使用mouse_event模拟鼠标行动 经测试,炉石传说对方法一的消息不响应,即使设置窗口为SetForegroundWindow 故采用第二种方式,第二种方式要求窗口在最前面,且固定位置,因此将窗口移到左上角,固定分辨率。代码见test/controlMouse.cpp test 4 识别卡牌费用 有2种方法,代码见test/HStest.cpp: 方法一:使用图像查找比较的方法。经测试,有如下问题: 1.图片大小不好统一 2.图片背景因为有粒子的变化,变动较大 3.费用在某些条件下会更改并改变颜色 方法二:使用数字识别的方法。 有2个场景需要识别费用: 场景一:发牌换牌阶段 此阶段,背景为黑色,便于分离。流程:灰度化,阈值成二值图像,轮廓提取,测试得到卡牌的轮廓范围,近似矩形,得到卡牌数(得到先手还是后手),根据轮廓得到每个卡牌,对每个卡牌的左上角进行灰度处理,阈值化,轮廓提取,得到数字图像。使用数字识别的方法进行判断。
欢迎下载研华科技主题白皮书: 【深度剖析】研华多核异构ARM核心板之机器视觉应用案例 [摘要] TI Sitara系列AM5718/5728是采用ARM+DSP多核异构架构,可以实现图像采集、算法处理、显示、控制等功能,具有实时控制、低功耗、多标准工业控制网络互联、工业人机界面的优化、2D/3D图形处理、1080 HD的高清视频应用、工业控制设备的小型化等特点。广泛应用在机器视觉、工业通讯、汽车多媒体、医疗影像、工厂自动化、工业物联网等领域。 https://www.eefocus.com/resource/advantech/index.p... OpenMV Cam概述: OpenMV项目旨在通过开发开源的低成本机器视觉摄像机,为业余爱好者和制造商提供机器视觉。OpenMV项目于2015年成功通过Kickstarter资助。第一代OpenMV摄像机基于STM的STM32F ARM Cortex-M MCU和Omnivision OV7725传感器。OpenMV摄像机可以在Python3中进行编程,并附有大量的图像处理功能,如面部检测和跟踪,关键点描述符,彩色斑点跟踪,QR和条形码支持,AprilTags,GIF和MJPEG记录等等。 OpenMV摄像机板内置RGB和红外LED,用于编程和视频流的USB FS,uSD插座和I / O头,可以分解PWM,UART,SPI和I2C。此外,OpenMV还支持使用诸如WiFi,BLE,Thermal(FIR)和LCD屏蔽等I / O头的扩展模块(屏蔽)。 OpenMV配备了专门用于支持OpenMV摄像机的跨平台IDE(基于QT创建者)。IDE允许查看帧缓冲区,访问传感器控制,上传脚本并通过串行通过USB(或WiFi / BLE(如果可用))在相机上运行它们。 STM32 机器人视觉摄像机OpenMV Cam实物截图: STM32 机器人视觉摄像机OpenMV Cam特性: 所有I / O引脚输出3.3V并具有5V容限。 在标准的M12镜头座上配有一个2.8mm镜头,便于其他镜头交换。 全速USB(12Mbs)接口到您的计算机。您的OpenMV摄像机在插入时将显示为虚拟COM端口和USB闪存驱动器。 一个能够100Mb读/写的微型SD卡插槽,允许您的OpenMV摄像头记录视频并轻松拉取机器视觉资产从微型SD卡。 SPI总线可以运行高达45Mbs,使您可以轻松地将系统中的图像数据传输到LCD屏蔽,WiFi屏蔽或另一个微控制器。 I2C总线,CAN总线和异步串行总线(TX / RX),用于与其他微控制器和传感器接口。 12位ADC和12位DAC。 两个用于伺服控制的I / O引脚。 所有I / O引脚上的中断和PWM(板上有9个I / O引脚)。 另外还有一个RGB LED和两个高功率的850nm红外LED。 由MacroFab在美国制造的OpenMV LLC OpenMV Cam M4 与 M7区别: STM32 机器人视觉摄像机OpenMV Cam应用: 标记跟踪 您可以使用您的OpenMV Cam来检测组的颜色,而不是独立的颜色。这允许您创建可以放置在对象上的色彩制作者(2个或更多颜色标签),允许您的OpenMV Cam了解标签对象的内容。视频演示这里。 人脸检测 您可以使用OpenMV Cam(或任何通用对象)检测Faces。您的OpenMV Cam可以处理Haar Cascades进行通用对象检测,并配有内置的Frontal Face Cascade和Eye Haar Cascade来检测脸部和眼睛。 眼睛追踪 您可以使用眼动跟踪与您的OpenMV摄像头来检测某人的注视。然后,您可以使用它来控制机器人。眼睛跟踪检测瞳孔的位置,同时检测图像中是否有眼睛。 光流 您可以使用光流来检测您的OpenMV摄像机正在查看的翻译。例如,您可以使用四通孔上的光流来确定其在空气中的稳定性。 QR码检测/解码 您可以使用OpenMV Cam在其视野中读取QR码。通过QR码检测/解码,您可以使智能机器人能够读取环境中的标签。您可以在此处查看我们的视频。 边缘/线路检测 您可以通过Canny Edge Detector算法或简单的高通滤波进行边缘检测,然后进行阈值处理。在您拥有二进制图像后,您可以使用霍夫检测器查找图像中的所有行。通过边缘/线检测,您可以使用OpenMV Cam来轻松检测对象的方向。 模板匹配 您可以使用与OpenMV Cam模板匹配来检测翻译的预先保存的图像何时被视图。例如,可以使用模板匹配来查找PCB上的基准或读取显示器上的已知数字。 图像捕获 您可以使用OpenMV摄像头捕获多达320x240 RGB565(或640x480灰度)BMP / JPG / PPM / PGM图像。您可

19,468

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 图形处理/算法
社区管理员
  • 图形处理/算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧