急求高手解答!
还是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;
}
请高手帮忙看看!