vc有读内存的函数吗?

yeslijing 2006-01-07 05:43:53
问一问:一般图像的象素值是如何在内存中存放的?我们现在已经知道数据存放地址的头指针,但是不大清楚内部数据结构,所以想问问如何取一段内存的数据并返回一个二维矩阵存放图像的象素值?
谢谢各位大哥
...全文
218 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
wotur 2006-01-12
  • 打赏
  • 举报
回复
学习
lixiaosan 2006-01-12
  • 打赏
  • 举报
回复
读入位图的位数据

CString m_LoadBmpName;
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;
}
..................... //其它代码
.....................
夏黛絲 2006-01-12
  • 打赏
  • 举报
回复
学习学习
mark
xing_xing_xing 2006-01-07
  • 打赏
  • 举报
回复
内存的数据保存的就是一个二维矩阵存放图像的象素值,还是要知道图像的结构,多大,多少位,几个通道等
MoonZ_Wu 2006-01-07
  • 打赏
  • 举报
回复
你想在内存中操作图片,我举一个操作位图的例子希望对你有帮助。
一般情况下是使用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第一位为透明值。所以你如果要直接获取的话你要先知道图片的颜色格式。按行扫描的方式来获取!
pomelowu 2006-01-07
  • 打赏
  • 举报
回复
用GetDIBits就是了

int GetDIBits(
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
);
handsomerun 2006-01-07
  • 打赏
  • 举报
回复
是位图吗
给你一个连接,上面有文档和源码


位图文件读写
http://www.vckbase.com/document/viewdoc/?id=674#A11

16,551

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Creator Browser
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

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