问一问:一般图像的象素值是如何在内存中存放的?我们现在已经知道数据存放地址的头指针,但是不大清楚内部数据结构,所以想问问如何取一段内存的数据并返回一个二维矩阵存放图像的象素值?
谢谢各位大哥
谢谢各位大哥
解决方案 »
- 求高人指点!关于文件查找的程序
- dbParkim.Open(m_dbParkim.m_session,strSql,NULL,pCount,DBGUID_DEFAULT,FALSE)无法删除
- 服务器端数据发送的问题!
- 问两个很白痴的问题
- 我将在下周推出免费邮件群发&群收系统.
- 这些错误如何解决?
- CSDN有人能回答吗:怎样开发能把IE的返回按钮无效的ActiveX控件
- 想学.net,应该如何入手(高分赠送)
- 写的一个VC/MFC程序在debug版本下运行几天就会导致死机,把exe文件重新替换一次,又可以用几天
- 对话框关联列表消息
- 就业请教,日本还是国内,恳请有相关经验的人支招,感激不尽!!!!!!!!!
- 打印的时候怎么知道当前打印的页边距离
给你一个连接,上面有文档和源码
位图文件读写
http://www.vckbase.com/document/viewdoc/?id=674#A11
HDC hdc, // handle to DC
HBITMAP hbmp, // handle to bitmap
UINT uStartScan, // first scan line to set
UINT cScanLines, // number of scan lines to copy
LPVOID lpvBits, // array for bitmap bits
LPBITMAPINFO lpbi, // bitmap data buffer
UINT uUsage // RGB or palette index
);
一般情况下是使用bitBlt函数来处理的,比如我要按宽度来获取图片一列象素点值
for (int i=0; i<width /*图片宽度*/; i++)
{
pDC->BitBlt(i /*目标x坐标*/, 0 /*目标y坐标*/, 1 /*宽*/,height /*高*/,
&mendc /*存有图片的设备*/, i /*源x坐标*/, 0 /*源y坐标*/,
SRCCOPY /*拷贝操作*/);
}
一般位图的象素结构大小与颜色值有关系,比如16色的图片,一个象素点用16位来表示有565,或555第一位为透明值。所以你如果要直接获取的话你要先知道图片的颜色格式。按行扫描的方式来获取!
static char szFilter[] = "位图文件 (*.bmp;*.dib)|*.bmp;*.dib|All Files (*.*)|*.*||";
CFileDialog dlg(TRUE,"*.bmp",NULL,OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT,szFilter);
if(dlg.DoModal() == IDOK)
{
UpdateData(TRUE);
m_LoadBmpName = dlg.GetPathName();
}
BeginWaitCursor(); CFile file;
if(!file.Open(m_LoadBmpName,CFile::modeRead))
{
TRACE0("Can't Open DIB File..\n");
EndWaitCursor();
return;
}
DWORD dwFileStart = file.GetPosition();
BITMAPFILEHEADER bmfh;
int nBytes;
nBytes = file.Read(&bmfh,sizeof(BITMAPFILEHEADER));
if(nBytes != sizeof(bmfh))
{
TRACE0("Failed To Read File Header..\n");
EndWaitCursor();
return;
}
if(bmfh.bfType != 0x4d42)
{
TRACE0("It's Not A DIB File..");
EndWaitCursor();
return;
}
int nBitsSize = bmfh.bfSize - bmfh.bfOffBits;
BYTE *pBits = (BYTE *)malloc(nBitsSize); //申请内存块
if(!pBits)
{
TRACE0("Out of Memory For DIB Bits..\n");
EndWaitCursor();
return;
}
file.Seek(dwFileStart + bmfh.bfOffBits,CFile::begin); //jump到位数据地址
nBytes = file.Read(pBits,nBitsSize); //读入pBits的就是位图位数据了
file.Close();
if(nBytes != nBitsSize)
{
TRACE0("Failed To Read Bits..\n");
free(pBits);
EndWaitCursor();
return;
}
..................... //其它代码
.....................