📄 array2d.h
字号:
// ====== File : Array2d.h =========
#ifndef ARRAY2D_H
#define ARRAY2D_H
#include "afxtempl.h"
// IMAGE 类, 可作为灰度图象的数组用;
template<class T>
class AFX_EXT_CLASS CArray2d {
int m_Width;
int m_Height;
T* pChar;
public:
CArray2d() : m_Width(0), m_Height(0), pChar(NULL){}
CArray2d(int nWidth, int nHeight, T* ptr) {
m_Width = nWidth;
m_Height = nHeight;
pChar = ptr;
}
CArray2d(int nWidth, int nHeight)
{
if(!ArrayAlloc(nWidth, nHeight)){
AfxMessageBox("Cannot allocate enough memory");
}
}
BOOL ArrayAlloc(int nWidth, int nHeight)
{
m_Width = nWidth;
m_Height = nHeight;
if((nWidth == 0) || (nHeight == 0)){
pChar = (T*)NULL;
return TRUE;
}
long nSize = nWidth * nHeight * sizeof(T);
if(nSize < 1024L) nSize = 1024;
HGLOBAL h = GlobalAlloc(GHND, nSize);
if(!h) return FALSE;
pChar = (T*)GlobalLock(h);
if(!pChar){
AfxMessageBox("pause!");
GlobalFree(h);
return FALSE;
}
return TRUE;
}
void ArrayFree()
{
m_Width = 0;
m_Height = 0;
HGLOBAL h = GlobalHandle((void*)pChar);
GlobalUnlock(h);
GlobalFree(h);
pChar = NULL;
}
void SetWidth(int nWidth) {
m_Width = nWidth;
}
void SetHeight(int nHeight) {
m_Height = nHeight;
}
int Attach(T* ptr)
{
if(pChar != NULL) return -1;
pChar = ptr;
return 0;
}
T* Detach() {
m_Width = 0;
m_Height = 0;
T* p = pChar;
pChar = NULL;
return p;
}
T* operator[](int n)
{
return (T*)(pChar+n*m_Width);
}
int GetWidth()
{
return m_Width;
}
int GetHeight()
{
return m_Height;
}
BOOL IsEmpty()
{
if((m_Width != 0) || (m_Height != 0))
return FALSE;
if(pChar != NULL)
return FALSE;
return TRUE;
}
~CArray2d()
{
if((m_Width != 0) && (m_Height != 0))
ArrayFree();
}
};
/*
template<class T> inline
CArray2d<T>::CArray2d()
template<class T> inline
CArray2d<T>::CArray2d(int nWidth, int nHeight)
{
if(!ArrayAlloc(nWidth, nHeight)){
AfxMessageBox("Cannot allocate enough memory");
}
}
template<class T> inline
BOOL CArray2d<T>::ArrayAlloc(int nWidth, int nHeight)
{
m_Width = nWidth;
m_Height = nHeight;
if((nWidth == 0) || (nHeight == 0)){
pChar = (T*)NULL;
return TRUE;
}
long nSize = nWidth * nHeight * sizeof(T);
if(nSize < 1024L) nSize = 1024;
HGLOBAL h = GlobalAlloc(GHND, nSize);
if(!h) return FALSE;
pChar = (T*)GlobalLock(h);
if(!pChar){
AfxMessageBox("pause!");
GlobalFree(h);
return FALSE;
}
return TRUE;
}
template<class T> inline
void CArray2d<T>::ArrayFree()
{
m_Width = 0;
m_Height = 0;
HGLOBAL h = GlobalHandle((void*)pChar);
GlobalUnlock(h);
GlobalFree(h);
pChar = NULL;
}
template<class T> inline
CArray2d<T>::~CArray2d()
{
if(pChar != NULL)
ArrayFree();
}
template<class T> inline
T* CArray2d<T>::operator [](int n)
{
return (pChar+n*m_Width);
}
template<class T> inline
int CArray2d<T>::GetHeight()
{
return m_Height;
}
template<class T> inline
int CArray2d<T> ::GetWidth()
{
return m_Width;
}
template<class T> inline
BOOL CArray2d<T>::IsEmpty()
{
if((m_Width != 0) || (m_Height != 0))
return FALSE;
if(pChar != NULL)
return FALSE;
return TRUE;
}
*/
#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -