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

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

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

总结起来,就是一些基本的语法/函数还不知道。由于我是菜鸟水平,所以希望回答的人不要长篇的复制粘贴,答案越简单清晰越好,最好就是几行需要的语法/函数,谢谢了
展开
 我来答
金毛狮王2007
2009-08-24 · TA获得超过529个赞
知道小有建树答主
回答量:215
采纳率:0%
帮助的人:397万
展开全部
既然用了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,这个不要我说了吧。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式