急求高手解答!

ccss123321 2012-03-24 10:07:10
还是bmp图片的问题。
我已经将bmp像素信息提取出来了,下面不知道怎么对应保存,比如我输入一个坐标D3DXVECTOR3(100.0f,100.0f,0.0f)怎么去对应图片上的位置并保存所对应的像素信息了?因为bmp像素信息是从左下角开始读取的。这是我的代码:
HRESULT CMapMetaSlugManager::ReadMapData( const char *str )
{
FILE *fpi;

if(fopen_s(&fpi,str,"rb") != S_OK)
{
ThrowException("no open the bmp!");
}

if(fpi != NULL)
{
WORD bfType;
fread(&bfType,1,sizeof(WORD),fpi);

if(0x4D42!=bfType)
{
ThrowException("图片格式不对!");
}

//读取bmp文件的文件头和信息头
fread(&strHead,1,sizeof(TAG_BITMAPFILEHEADER),fpi);
fread(&strInfo,1,sizeof(TAG_BITMAPINFOHEADER),fpi);

m_iBmpWidth = strInfo.biWidth;
m_iBmpHeight = strInfo.biHeight;
imagedata = (TAGIMAGEDATA*)malloc(m_iBmpWidth * m_iBmpHeight * sizeof(TAGIMAGEDATA));

//初始化原始图片的像素数组
for(int i = 0;i < m_iBmpHeight;++i)
{
for(int j = 0;j < m_iBmpWidth;++j)
{
(*(imagedata + i * m_iBmpWidth + j)).blue = 0;
(*(imagedata + i * m_iBmpWidth + j)).green = 0;
(*(imagedata + i * m_iBmpWidth + j)).red = 0;
}
}

//读出图片的像素数据
fread(imagedata,sizeof(TAGIMAGEDATA) * m_iBmpWidth,m_iBmpHeight,fpi);

//每个像素所对应的颜色值
//BMP图像的像素数据是从左下角:由左往右,由下往上逐行扫描的
int k, m, n = 0;//k:红,m:绿,n:蓝
for(int i=0; i<m_iBmpHeight; ++i)//行
{
for(int j=0; j<m_iBmpWidth; ++j)//列
{
n = (*(imagedata + i * m_iBmpWidth + j)).red;
m = (*(imagedata + i * m_iBmpWidth + j)).green;
k = (*(imagedata + i * m_iBmpWidth + j)).blue;
}
}

//保存读出来的数据即高度
{
。。。。。。。。。。。。。。。。。。。。。。。。。
。。。。。。。。。。。。。。。。。。。。。。。。。
}



fclose(fpi);

//释放内存
delete[] imagedata;
}
else
{
return NULL;
}

return S_OK;
}


请高手帮忙看看!
...全文
107 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
Kevin_Perkins 2012-03-24
  • 打赏
  • 举报
回复
比如将BMP的RGB值存放在一个二维数组中,你需要做的是将以左上角为原点,向右为X正方向,向下为Y正方向的坐标转换为以左下角为原点,向右为X正方向,向上为Y正方向的坐标。
如坐标D3DXVECTOR3(100.0f,100.0f,0.0f),位图高度为H,对应D3DXVECTOR3(100.0f,abs(100.0f - H),0.0f)即为RGB数组索引。

64,637

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

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