VC++6.0中,MFC的对话框工程,关于bmp位图加载与读取的菜鸟问题 50
我有一个真彩bmp文件,已经加到工程组的资源中了;对话框上也放了一个图象控件,属性已改成了位图。(另外按照一本书上的步骤,已经将什么GdiPlus类加载了,当然用不用是另...
我有一个真彩bmp文件,已经加到工程组的资源中了;对话框上也放了一个图象控件,属性已改成了位图。
(另外按照一本书上的步骤,已经将什么GdiPlus类加载了,当然用不用是另一回事了)
现在我的问题有两个:
1.如果获得位图(位于工程组的资源中,不是位于独立文件中)每个像素的值?当然真彩bmp的文件格式我懂,所以更确切的说,是如何获得左下角第1个像素的蓝色分量,在内存中的指针?
2.我通过一定的处理,将内存中的那个位图修改了,那么如何让其在图象控件上显示?
总结起来,就是一些基本的语法/函数还不知道。由于我是菜鸟水平,所以希望回答的人不要长篇的复制粘贴,答案越简单清晰越好,最好就是几行需要的语法/函数,谢谢了 展开
(另外按照一本书上的步骤,已经将什么GdiPlus类加载了,当然用不用是另一回事了)
现在我的问题有两个:
1.如果获得位图(位于工程组的资源中,不是位于独立文件中)每个像素的值?当然真彩bmp的文件格式我懂,所以更确切的说,是如何获得左下角第1个像素的蓝色分量,在内存中的指针?
2.我通过一定的处理,将内存中的那个位图修改了,那么如何让其在图象控件上显示?
总结起来,就是一些基本的语法/函数还不知道。由于我是菜鸟水平,所以希望回答的人不要长篇的复制粘贴,答案越简单清晰越好,最好就是几行需要的语法/函数,谢谢了 展开
1个回答
展开全部
既然用了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,这个不要我说了吧。
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,这个不要我说了吧。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询