我用Windows 2000+VC6.0的平台
我现在要处理多付JPG图象,我自己定义了一个类用来生成Bitmap*对象.构造函数定义如下:
MyPhoto::MyPhoto(CString stringOpenFileName)
{
fileName=stringOpenFileName;
if(fileName!="")
{
Bitmap Ori_photo(ToWChar(fileName.GetBuffer(fileName.GetLength())));
INT iWidth=Ori_photo.GetWidth();
INT iHeight=Ori_photo.GetHeight();
//photo和 iphoto都是MyPhoto的成员变量,类型为Bitmap *
photo=Ori_photo.Clone(0,0,iWidth,iHeight,PixelFormatDontCare);
iphoto=photo->Clone(0,0,iWidth,iHeight,PixelFormatDontCare); }
}
可是当我处理第二张图象时,发现Ori_photo对象失效,它一直占用着内存.
请问该怎么办??
我是基于对话框的工程,是不是要发送一个消息来关闭它,我不知道怎么办!!!!
为什么我不能用
Bitmap mybitmap=new Bitmap("filename");
构造Bitmap 对象?
我现在要处理多付JPG图象,我自己定义了一个类用来生成Bitmap*对象.构造函数定义如下:
MyPhoto::MyPhoto(CString stringOpenFileName)
{
fileName=stringOpenFileName;
if(fileName!="")
{
Bitmap Ori_photo(ToWChar(fileName.GetBuffer(fileName.GetLength())));
INT iWidth=Ori_photo.GetWidth();
INT iHeight=Ori_photo.GetHeight();
//photo和 iphoto都是MyPhoto的成员变量,类型为Bitmap *
photo=Ori_photo.Clone(0,0,iWidth,iHeight,PixelFormatDontCare);
iphoto=photo->Clone(0,0,iWidth,iHeight,PixelFormatDontCare); }
}
可是当我处理第二张图象时,发现Ori_photo对象失效,它一直占用着内存.
请问该怎么办??
我是基于对话框的工程,是不是要发送一个消息来关闭它,我不知道怎么办!!!!
为什么我不能用
Bitmap mybitmap=new Bitmap("filename");
构造Bitmap 对象?
Bitmap *pmybitmap = new Bitmap("unicode_filename");
注意你的指针写法!!!上面的问题不应该存在
Bitmap *pmybitmap = new Bitmap("unicode_filename");
我的平台是windows2000+VC6.0
是不是配置有问题??
#ifndef ULONG_PTR
#define ULONG_PTR unsigned long*
#endif#include "Gdiplus.h"
#pragma comment(lib,"GdiPlus.lib")
using namespace Gdiplus;
是不是还要引入其他空间名?我以前在视图/文档结构中用得很顺手的,我想问题应该出在析够函数中,可能是对话框的管理方式的差异吧!
HELP ME!!!
现在的问题是:第一次打开TEMPFILE后,我即使删除了处理好的对象,但并没有释放对TEMPFILE的控制权,第二个文件的副本不能生成,导致new Myphoto(TEMPFILE)时出错,请大家帮忙来看看.
-----------------------------------------------------------
// QGdiPlus.h: interface for the QGdiPlus class.
//
//////////////////////////////////////////////////////////////////////#if !defined(AFX_QGDIPLUS_H__AFE8336A_F370_4687_904E_60D117BCBE45__INCLUDED_)
#define AFX_QGDIPLUS_H__AFE8336A_F370_4687_904E_60D117BCBE45__INCLUDED_#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000// ------------------------------------------------------------ [11/14/2003]
// Some Macro and definitions of GdiPlus environment#define iterator _iterator#ifdef _DEBUGstatic int nGdiPlusObjects = 0;namespace Gdiplus
{
namespace DllExports
{
#include <GdiplusMem.h>
};
#ifndef _GDIPLUSBASE_H
#define _GDIPLUSBASE_H
class GdiplusBase
{
public:
void (operator delete)(void* in_pVoid)
{
nGdiPlusObjects--;
DllExports::GdipFree(in_pVoid);
}
void* (operator new)(size_t in_size)
{
nGdiPlusObjects++;
return DllExports::GdipAlloc(in_size);
}
void (operator delete[])(void* in_pVoid)
{
nGdiPlusObjects--;
DllExports::GdipFree(in_pVoid);
}
void* (operator new[])(size_t in_size)
{
nGdiPlusObjects++;
return DllExports::GdipAlloc(in_size);
}
void * (operator new)(size_t nSize, LPCSTR /*lpszFileName*/, int /*nLine*/)
{
nGdiPlusObjects++;
return DllExports::GdipAlloc(nSize);
}
void operator delete(void* p, LPCSTR /*lpszFileName*/, int /*nLine*/)
{
nGdiPlusObjects--;
DllExports::GdipFree(p);
}
};
#endif // #ifndef _GDIPLUSBASE_H
}
#endif // #ifdef _DEBUG
// ------------------------------------------------------------ [11/14/2003]
// an assistant class of GdiPlus environment#include <gdiplus.h>#ifdef _MFC_VER
#include <afx.h>
#endif
#undef iterator//using namespace Gdiplus; // must know well this namespace may conflict with some stl definitions
#pragma comment (lib, "Gdiplus.lib")class QGdiPlus
{
public:
QGdiPlus(): m_Token(0) { Gdiplus::GdiplusStartupInput input; Gdiplus::GdiplusStartup(& m_Token, & input, NULL); }
~QGdiPlus()
{
Gdiplus::GdiplusShutdown(m_Token);
#ifdef _DEBUG
#ifdef _MFC_VER
if (nGdiPlusObjects > 0)
afxDump << _T(">>> GdiPlus Memory Leaks: ") << nGdiPlusObjects << _T(" objects! <<<\n");
else if (nGdiPlusObjects < 0)
afxDump << _T(">>> GdiPlus Multiple Deletes: ") << -nGdiPlusObjects << _T(" objects! <<<\n");
#endif
#ifdef _ATL_VER
if (nGdiPlusObjects > 0)
ATLTRACE2(_T(">>> GdiPlus Memory Leaks: %d objects! <<<\n"), nGdiPlusObjects);
else if (nGdiPlusObjects < 0)
ATLTRACE2(_T(">>> GdiPlus Multiple Deletes: %d objects! <<<\n"), -nGdiPlusObjects);
#endif
#endif
}
private:
// The token we get from GDI+
ULONG_PTR m_Token;
};#endif // !defined(AFX_QGDIPLUS_H__AFE8336A_F370_4687_904E_60D117BCBE45__INCLUDED_)
----------------------------------------
将上述代码保存成.h文件加入Project,然后在App类中从QGdiplus派生对象作为成员变量即可完成gdi+初始化以及new问题。
让我对GDI+又回复了信心!在APP中我是这样初始化:
GdiplusStartup(&gdiplusToken, &m_gdiplusStartupInput, NULL);
以下为关闭:
GdiplusShutdown(gdiplusToken);
是分别在前面加一个Q吗?我在工程中加入QGdiplus.h后,编译出错:
e:\wanjie\三人组集成_1215\qgdiplus.h(26) : fatal error C1083: Cannot open include file: 'GdiplusMem.h': No such file or directory
MyPhoto.cpp
e:\wanjie\三人组集成_1215\qgdiplus.h(26) : fatal error C1083: Cannot open include file: 'GdiplusMem.h': No such file or directory
Error executing cl.exe.
第26行代码为: #include <GdiplusMem.h>
可是,我的GdiplusMem.h文件已经包含在当前目录下
扑通,扑通!我扑通了