关于GDI+打开的BMP文件如何搞到画布下的有关问题

关于GDI+打开的BMP文件怎么搞到画布上的问题
本帖最后由 nabasasun 于 2013-03-07 16:30:00 编辑
我在h文件里定义了一个全局的Bitmap *bamp的指针,但是我的双缓冲画布里用的是Bitmap bmp。
也就是Bitmap 有两个,其中一个是指针

打开图片(用OpenFile的菜单命令)是保存在 bamp里,因为只有它是全局的。而
显示图片(用加载了Bitmap bmp的相当是GDI的内存画布来显示这BMP/jpg图片)和画图都是在bmp中进行,因为bmp是双缓冲的画布,显示的时候是不闪烁的。  

这就有个麻烦的地方:
只有打开并显示的图片可以保存
但是画的图(铅笔工具,直线工具什么乱七八糟的操作)不能画在画布上(应该是被图片覆盖在下面了)
同时也不能够保存(因为我用的是 bamp->Save的方法存储,没有存到 bmp 的内容 )

而我如果在h文件里把bmp定义成全局的话,在CPP文件的构造函数上会提示错误,
说我bmp没有合适构造函数可用

我只不过是想实现WINDOWS XP自带画图那样的效果而已,就是打开图片,处理图片(在打开的图片上画图),还有保存图片,都是在一个类的对象中进行以达到统一。

------解决方案--------------------
像Bitmap这样的gdi+类的构造函数都是protected限制访问,所以你可以这么做。
在.h中Bitmap* g_bitmap = NULL;
在打开图片时 delete g_bitmap;
g_bitmap = Bitmap::FromFile(L"");
然后在此Bitmap上绘制。

至于你说用2个Bitmap没必要,一个就够了。
在你的Bitmap中用gdi+做所有绘制,然后在OnPaint中用 CBitmap做双缓存,把Bitmap绘制到内存dc中,最后把内存dc拷贝到目标dc。
------解决方案--------------------
可以尝试用cimage

------解决方案--------------------
Graphics graphics(hdc);
Image image(L"xxx.bmp");
graphics.DrawImage(&image, 10, 10);

------解决方案--------------------
但是画的图(铅笔工具,直线工具什么乱七八糟的操作)不能画在画布上

关于GDI+打开的BMP文件如何搞到画布下的有关问题有图?