VC++6.0中,MFC的对话框工程,关于bmp位图加载与读取的菜鸟问题

我有一个真彩bmp文件,已经加到工程组的资源中了;对话框上也放了一个图象控件,属性已改成了位图。
(另外按照一本书上的步骤,已经将什么GdiPlus类加载了,当然用不用是另一回事了)

现在我的问题有两个:
1.如果获得位图(位于工程组的资源中,不是位于独立文件中)每个像素的值?当然真彩bmp的文件格式我懂,所以更确切的说,是如何获得左下角第1个像素的蓝色分量,在内存中的指针?
2.我通过一定的处理,将内存中的那个位图修改了,那么如何让其在图象控件上显示?

总结起来,就是一些基本的语法/函数还不知道。由于我是菜鸟水平,所以希望回答的人不要长篇的复制粘贴,答案越简单清晰越好,最好就是几行需要的语法/函数,谢谢了

第1个回答  2009-08-24
既然用了GDI+就好办。
1.VOID Example_GetPixel(HDC hdc)

{

Graphics graphics(hdc);

// Create a Bitmap object from a file.
Bitmap myBitmap(L"Climber.bmp");

// Get the value of a pixel from myBitmap.
Color pixelColor;
myBitmap.GetPixel(25, 25, &pixelColor);

int blue = pixelColor.GetBlue();
}

2.处理位图,三步走,先Bitmap::LockBits (),在改像素,再UnlockBits。
给个例子:
VOID Example_LockBits2(HDC hdc)
{
Graphics graphics(hdc);
UINT* pixels;

// 从文件创建位图
Bitmap bitmap(L"LockBitsTest2.bmp");

// 显示位图
graphics.DrawImage(&bitmap, 10, 10);

// 锁定位图中一块50x30的区域
BitmapData bitmapData;
Rect rect(20, 10, 50, 30);

bitmap.LockBits(
&rect,
ImageLockModeWrite,
PixelFormat32bppARGB,
&bitmapData);

// 写入有LOckbits提供的缓冲区
pixels = (UINT*)bitmapData.Scan0;

for(UINT row = 0; row < 30; ++row)
{
for(UINT col = 0; col < 50; ++col)
{
pixels[row * bitmapData.Stride / 4 + col] = 0xff00ff00;
}
}

// 提交更改,解锁位图
bitmap.UnlockBits(&bitmapData);

//显示修改后的位图
graphics.DrawImage(&bitmap, 150, 10);
}

你要在控件显示,就先获取控件的hdc,这个不要我说了吧。

VC++6.0中,mfc中,在主窗口点击某个菜单,读取一个已知的txt文档,并在弹 ...
点击菜单 -》给菜单添加响应函数,在响应函数里面实现读取txt文件,可以读到一个全局的buffer里面,用数组,-》然后创建一个模态对话框,使用dc,在对话框中显示出来。或者自己创建一个对话框资源,给对话框上面添加一个编辑框,然后用这个资源创建对话框 来在对话框的编辑框中显示出来。要不你把你的读...

VC++6.0创建MFC AppWizard(exe)工程,编译总是显示错误,怎么办?
你看看Project-->Settings-->Link 下面的Project Options里 的subsytem后面是不是console,如果是把它改成windows 因为MFC是windows程序,你的环境设置可以是控制台程序!

VC++ MFC在对话框上画图问题
1、如何在新建的一个dialog中添加onpaint()函数?例如你新建了一个dialog,类名为test22(添加类是双击新建那个窗口),接着找到这个类的头文件test22.h,在其中的protected中添加一行afx_msg void OnPaint();这样就可以在test22.cpp中用onpaint()函数了,添加void test22::OnPaint(){}就可以了:...

如何用VC++6.0在窗口里显示一个位图?请高手指点
1.打开vc++6.0,选择“文件”->“新建",打开新建对话框,选择“工程”->MFC AppWizard [exe]->选择保存路径及文件名ddd,选择单文档->完成。2.打开窗口左下角选择Re..,在Dialog上右击,选择插入->Bitmap->引入->引入位图。3.选择Cl..,展开CDdddView->OnDraw,双击OnDraw,进入编程界面。void...

VC++6.0工程中,使用MFC应用程序。关于C+工程名+Dlg.cpp文件。
你创建工程的时候,选择对话框模式,它默认的是多重文档模式,再新建一工程,然后在向导里 第一个步骤里面 将多重文档 改为第三个 对话框 模式,就好了。

VC++ MFC 写的对话框程序运行界面效果和浏览的效果不同
打开stdafx.h文件,到最后,有一段代码 ifdef _UNICODE#if defined _M_IX86#pragma comment(linker,"\/manifestdependency:\\"type='win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' processorArchitecture='x86' publicKeyToken='6595b64144ccf1df' language='*'\\"")#elif ...

VC++6.0中MFC复选框问题,跪求解答,在线等啊!
if(IsDlgButtonChecked(IDC_CHECK1))a = TRUE;else a = FALSE;给该控件添加一个消息响应函数,消息响应函数里添加以上代码,或者在你需要获取a的值的时候,添加以上判断语句,并给a赋相应的值也行 如果还有什么不明白的话,可以继续追问~~~

vc++ mfc,编译为什么会出现 Cannot open include file: 'dib.h...
出错的原因可能是:1. 工程目录中没有相应的头文件,需要将该头文件复制到工程目录下。2. VC++6.0的工程路径设置不正确,详细说明如下:如果你在cpp文件中有这样的预编译指令:#include "lcs\\lcs.h",这条预编译指令的含义是编译器会在 工程路径\\lcs 这个目录下查找lcs.h这个头文件,lcs\\lcs.h...

利用VC++6.0中的MFC编写软件。 如何将两个MFC工程合并成为一个?其中...
如果是对话框资源,这个有办法。将两个工程备份后(最好放在同级目录下),打开一个工程,选择添加工程到当前解决方案(菜单Project—Insert Project into workspace),将两个工程放到同一个workspace下,这时候,在右侧的资源编辑器中,就可以对资源Ctrl+C \/ Ctrl+V 在两个工程之间复制了,复制完成后,...

vc++6.0怎么给MFC工程中对话框添加静态文本控件
打开对话框编辑器(双击资源中需要编辑的对话框资源即可,例如IDD_DIALOG1)工具栏上点击右键,选择“控件",英文版的话是"Control"将控件工具栏上的”静态文本“控件拉到对话框上即可。

相似回答