VC6下怎样用GDI+实现对图像进行修改后保存?在自己写的图像处理软件中打开JPG,GIF,BMP图像,在图像上画矩形,然后点保存就将修改后的图像保存下来,怎样实现?
解决方案 »
- MFC对话框背景设置问题
- 模态和非模态对话框刚开始的显示位置
- MFC 搜索 Tree Control上的内容
- 对ShellCode感心趣的,近来看看(内详)
- 问大家一个大家都肯定会的问题!!
- 关于CString的赋值是内存访问错误,高手请进
- 一个com的问题,高手请进!欢迎进来讨论。谢谢!
- 可追加高分! 我重载了对话框的pretranslatemessage消息, 想阻止键盘消息传递到窗口的其它控件中.该如何做?
- (卖血求助)谁能提供有关vb.net开发activex控件然后在客户端ie按装的教程
- 你们做共享软件究竟赚不赚钱?各位老大,给我点信心吧?我都快放弃了
- 请问什么样的类需要去new?
- CFileDialog使用后,再去使用winExec就会失败,即:winExec调用的程序无法起来,不知是何原因?
Save需要结合CDC
#include <gdiplus.h>
#include <stdio.h>
using namespace Gdiplus;
#include <windows.h>
#include <gdiplus.h>
#include <stdio.h>
using namespace Gdiplus;INT GetEncoderClsid(const WCHAR* format, CLSID* pClsid); // helper functionINT main()
{
// Initialize GDI+.
GdiplusStartupInput gdiplusStartupInput;
ULONG_PTR gdiplusToken;
GdiplusStartup(&gdiplusToken, &gdiplusStartupInput, NULL); CLSID encoderClsid;
Status stat;
Image* image = new Image(L"Bird.bmp");
Graphics* g = new Graphics(image ); //Graphics::FromImage(&bmp);
SolidBrush br(Color(255, 255, 255));
g->FillRectangle(&br, RectF(0, 0, 100, 60)); delete g;
// Get the CLSID of the BMP encoder.
GetEncoderClsid(L"image/bmp", &encoderClsid); stat = image->Save(L"Bird.bmp", &encoderClsid, NULL); if(stat == Ok)
printf("Bird.png was saved successfully\n");
else
printf("Failure: stat = %d\n", stat); delete image;
GdiplusShutdown(gdiplusToken);
return 0;
}int GetEncoderClsid(const WCHAR* format, CLSID* pClsid)
{
UINT num = 0; // number of image encoders
UINT size = 0; // size of the image encoder array in bytes ImageCodecInfo* pImageCodecInfo = NULL; GetImageEncodersSize(&num, &size);
if(size == 0)
return -1; // Failure pImageCodecInfo = (ImageCodecInfo*)(malloc(size));
if(pImageCodecInfo == NULL)
return -1; // Failure GetImageEncoders(num, size, pImageCodecInfo); for(UINT j = 0; j < num; ++j)
{
if( wcscmp(pImageCodecInfo[j].MimeType, format) == 0 )
{
*pClsid = pImageCodecInfo[j].Clsid;
free(pImageCodecInfo);
return j; // Success
}
} free(pImageCodecInfo);
return -1; // Failure
}
CLSID encoderClsid;
Status stat;
Image* image=new Image(L"4.jpg");
Graphics* g=new Graphics(image); //Graphics::FromImage(&bmp);
SolidBrush br(Color(255, 255, 255));
g->FillRectangle(&br, RectF(0, 0, 100, 60));
delete g;
// Get the CLSID of the BMP encoder.
GetEncoderClsid(L"image/bmp", &encoderClsid); stat = image->Save(L"4.jpg", &encoderClsid, NULL); if(stat == Ok)
AfxMessageBox("Bird.png was saved successfully\n");
else
AfxMessageBox("Failure: stat = %d\n"); delete image;
Image* image;
onopen()
{
image=new Image(L"4.jpg");
}OnDraw()
{
Graphics* g=new Graphics(image); //Graphics::FromImage(&bmp);
SolidBrush br(Color(255, 255, 255));
g->FillRectangle(&br, RectF(0, 0, 100, 60));
// 这里可添加将image绘制到界面的代码
...
delete g;
}
onsave()
{
CLSID encoderClsid;
GetEncoderClsid(L"image/jpg", &encoderClsid); image->Save(L"4.jpg", &encoderClsid, NULL);
}
例如www.OpenCV.org.cn
中国的程序员总是难以在巨人的肩膀上登高远望。