vc++中把2个数组的数据生成到一个bmp文件里成为图片。
我有一个.csv文件,里面有2组数据,分别对应x,y值,x数组(0,1,2,……500),y数组(151,150,150,。。)x,y散点图就是一条连续的曲线。现在要把这...
我有一个.csv文件,里面有2组数据,分别对应x,y值,x数组(0,1,2,……500),y数组(151,150,150,。。)x,y散点图就是一条连续的曲线。现在要把这些数据存入到一个bmp文件中生成图片,640*480的图,怎么写程序啊。求详细,答得好再加分。
void CDlgTestRead::OnBnClickedOk()
{
UCHAR* pSrc = NULL;
int iImageWidth = 0;
int iImageHeight= 0;
pSrc = GetImagePtr(m_pFvxImageRead);
m_pFvxImageRead->ClearImage();
iImageHeight=m_pFvxImageRead->ImageHeight;
iImageWidth =m_pFvxImageRead->ImageWidth;
//////////////////////////////////////////////////////////////////////////
在这里添加程序
//////////////////////////////////////////////////////////////////////////
m_file->FilePath = "d:\\1.bmp";
m_file->SaveBitmap(m_pFvxImageRead);
OnOK();
}
前面还有个初始化
BOOL CDlgTestRead::OnInitDialog()
{
CDialog::OnInitDialog();
CoInitialize(NULL);
m_pFvxImageRead.CreateInstance(__uuidof(FvxImage));
m_file.CreateInstance(__uuidof(FvxFileAccess));
m_pFvxImageRead->ImageWidth = 640;
m_pFvxImageRead->ImageHeight = 480;
return TRUE;
说是先把二维的数据变成一维的,比如(x,y)就变成y*m-imagewidth+x. 展开
void CDlgTestRead::OnBnClickedOk()
{
UCHAR* pSrc = NULL;
int iImageWidth = 0;
int iImageHeight= 0;
pSrc = GetImagePtr(m_pFvxImageRead);
m_pFvxImageRead->ClearImage();
iImageHeight=m_pFvxImageRead->ImageHeight;
iImageWidth =m_pFvxImageRead->ImageWidth;
//////////////////////////////////////////////////////////////////////////
在这里添加程序
//////////////////////////////////////////////////////////////////////////
m_file->FilePath = "d:\\1.bmp";
m_file->SaveBitmap(m_pFvxImageRead);
OnOK();
}
前面还有个初始化
BOOL CDlgTestRead::OnInitDialog()
{
CDialog::OnInitDialog();
CoInitialize(NULL);
m_pFvxImageRead.CreateInstance(__uuidof(FvxImage));
m_file.CreateInstance(__uuidof(FvxFileAccess));
m_pFvxImageRead->ImageWidth = 640;
m_pFvxImageRead->ImageHeight = 480;
return TRUE;
说是先把二维的数据变成一维的,比如(x,y)就变成y*m-imagewidth+x. 展开
1个回答
展开全部
给你提供一下明确的思路吧。
第一个方法比较麻烦,地址写值。LPDIBMAP指针可以获得位图数据,这个位图数据就是x*y*sizeof(RGB)大小的指针。可以通过CSV读取到的X/Y值,计算XY位移,然后进行sizeof(RGB)大小的memcopy复制一个固定RGB值进去就可以了。其实代码不多,但。。指针操作要求稍高。
第二个方法推荐使用。
资源中创建一个640*480位图资源,纯色的。
然后在你的CDlgTestRead的对应响应函数中,
1·创建内存DC CreateCompatibleDC(memDC);
2·导入资源位图: bmp.LoadBitmap(IDB_BITMAP1);
3·选位图到DC:memDC.SelectObject(&bmp);
4·在内存DC上面,根据CSV的数据画线(循环)MoveTo..LineTo
5·memDC.SelectObject(oldBmp);
6·保存bmp到文件就可以了。
第一个方法比较麻烦,地址写值。LPDIBMAP指针可以获得位图数据,这个位图数据就是x*y*sizeof(RGB)大小的指针。可以通过CSV读取到的X/Y值,计算XY位移,然后进行sizeof(RGB)大小的memcopy复制一个固定RGB值进去就可以了。其实代码不多,但。。指针操作要求稍高。
第二个方法推荐使用。
资源中创建一个640*480位图资源,纯色的。
然后在你的CDlgTestRead的对应响应函数中,
1·创建内存DC CreateCompatibleDC(memDC);
2·导入资源位图: bmp.LoadBitmap(IDB_BITMAP1);
3·选位图到DC:memDC.SelectObject(&bmp);
4·在内存DC上面,根据CSV的数据画线(循环)MoveTo..LineTo
5·memDC.SelectObject(oldBmp);
6·保存bmp到文件就可以了。
更多追问追答
追问
大哥能帮忙写下代码吗?初学。。。。越看越晕。我现在第一步,创建一个640*480位图资源就卡住了。。
追答
自己写的才能掌握了啊。
网上类似代码很多的,你通过各种关键词和函数名能搜索到很多代码,参考一下,自己写没问题。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询