/**********************************************************************
* Copyright (c) 2003, Medical Image Processing Lab, Sichuan University
* All rights reserved.
*
* 文件名称:ImageObject.cpp
* 摘 要:图象类源文件
*
* 当前版本:1.0
* 最后修改日期:2003年02月26日
* 修改人:Wang Xiaoyi
************************************************************************/
#include "stdafx.h"
#include "ImageObject.h"
char *CImageObject::szExtensions[] = { ".BMP", ".GIF", ".PCX", ".TGA", ".JPG", ".TIF", "" };
CImageObject::CImageObject()
{
InitVars();
}
/*********************************************************************
* 函数名称:CImageObject::CImageObject( const char *pszFilename,
* CDC *pDC, int nX, int nY )
* 函数介绍:CImageObject的构造函数
* 输入参数:pszFilename-图像的完整路径名
* pDC-用来显示图像的设备上下文指针
* nX-图像左上角在显示设备上的横坐标值,默认值为0
* nY-图像左上角在显示设备上的纵坐标值,默认值为0;
* 输出参数:(无)
* 返回值 :(无)
*********************************************************************/
CImageObject::CImageObject( const char *pszFilename, CDC *pDC, int nX, int nY )
{
//Initialize the class members
InitVars();
//Load a image from storge devices
Load( pszFilename, pDC, nX, nY );
}
CImageObject::~CImageObject()
{
if( m_hDib ) ::GlobalFree( m_hDib );
if( m_pszFilename != NULL ) delete [] m_pszFilename;
}
/*********************************************************************
* 函数名称:void CImageObject::InitVars( BOOL bFlag )
* 函数介绍:初始化类成员
* 输入参数:bFlag-用于控制是否对两个类成员m_pszFilename和m_pLogPal初始化。
* 如果bFlag=FALSE(default),上述两个类成员初始化为NULL;
* 否则不赋初值。
* 输出参数:(无)
* 返回值 :void
*********************************************************************/
void CImageObject::InitVars( BOOL bFlag )
{
m_nWidth = m_nHeight = m_nBits = m_nColors = m_nImageType = 0;
m_nX = m_nY = 0;
m_nLastError = 0;
m_hDib = NULL;
m_nPaletteCreationType = FIXED_PALETTE;
if( !bFlag )
{
m_pszFilename = NULL;
m_pLogPal = NULL;
}
m_nQuality = 50;
}
/*********************************************************************
* 函数名称:BOOL CImageObject::Load( const char *pszFilename, CDC *pDC,
* int nX, int nY )
* 函数介绍:从存储设备上导入图像
* 输入参数:pszFilename-图像的完整路径名
* pDC-用来显示图像的设备上下文指针
* nX-图像左上角在显示设备上的横坐标值,默认值为0
* nY-图像左上角在显示设备上的纵坐标值,默认值为0;
* 输出参数:(无)
* 返回值 :BOOL型,成功导入图像则返回TRUE;否则返回FALSE
*********************************************************************/
BOOL CImageObject::Load( const char *pszFilename, CDC *pDC, int nX, int nY )
{
m_nImageType = FileType( pszFilename );
if( m_nImageType == 0 )
{
m_nLastError = IMAGELIB_UNSUPPORTED_FILETYPE;
return( FALSE );
}
KillImage();
m_pszFilename = new char[strlen(pszFilename)+1];
if( m_pszFilename != NULL )
{
strcpy( m_pszFilename, pszFilename );
}
//Begin to load image
switch( m_nImageType )
{
//load an image of BMP format
case IMAGETYPE_BMP:
m_hDib = ::LoadBMP( pszFilename );
if( m_hDib == NULL )
{
m_nLastError = ::GetLastPicLibError();
return( FALSE );
}
break;
//load an image of GIF format
case IMAGETYPE_GIF:
m_hDib = ::LoadGIF( pszFilename );
if( m_hDib == NULL )
{
m_nLastError = ::GetLastPicLibError();
return( FALSE );
}
break;
//load an image of JPG format
case IMAGETYPE_JPG:
m_hDib = ::LoadJPG( pszFilename );
if( m_hDib == NULL )
{
m_nLastError = ::GetLastPicLibError();
return( FALSE );
}
break;
//load an image of JPG format
case IMAGETYPE_PCX:
m_hDib = ::LoadPCX( pszFilename );
if( m_hDib == NULL )
{
m_nLastError = ::GetLastPicLibError();
return( FALSE );
}
break;
//load an image of TGA format
case IMAGETYPE_TGA:
m_hDib = ::LoadTGA( pszFilename );
if( m_hDib == NULL )
{
m_nLastError = ::GetLastPicLibError();
return( FALSE );
}
break;
//load an image of TIF format
case IMAGETYPE_TIF:
m_hDib = ::LoadTIF( pszFilename );
if( m_hDib == NULL )
{
m_nLastError = ::GetLastPicLibError();
return( FALSE );
}
break;
}
ProcessImageHeader();
ProcessPalette();
if( pDC != NULL )
{
Draw( pDC, nX, nY );
}
return( TRUE );
}
BOOL CImageObject::GetImageInfo( const char *pszFilename, int *pnWidth, int *pnHeight, int *pnPlanes, int *pnBitsPerPixel, int *pnNumColors )
{
int nImageType;
nImageType = FileType( pszFilename );
if( nImageType == 0 )
{
m_nLastError = IMAGELIB_UNSUPPORTED_FILETYPE;
return( FALSE );
}
switch( nImageType )
{
case IMAGETYPE_BMP:
return( ::GetBMPInfo( pszFilename, pnWidth, pnHeight, pnPlanes, pnBitsPerPixel, pnNumColors ) );
case IMAGETYPE_GIF:
return( ::GetGIFInfo( pszFilename, pnWidth, pnHeight, pnPlanes, pnBitsPerPixel, pnNumColors ) );
case IMAGETYPE_JPG:
return( ::GetJPGInfo( pszFilename, pnWidth, pnHeight, pnPlanes, pnBitsPerPixel, pnNumColors ) );
case IMAGETYPE_PCX:
return( ::GetPCXInfo( pszFilename, pnWidth, pnHeight, pnPlanes, pnBitsPerPixel, pnNumColors ) );
case IMAGETYPE_TGA:
return( ::GetTGAInfo( pszFilename, pnWidth, pnHeight, pnPlanes, pnBitsPerPixel, pnNumColors ) );
case IMAGETYPE_TIF:
return( ::GetTIFInfo( pszFilename, pnWidth, pnHeight, pnPlanes, pnBitsPerPixel, pnNumColors ) );
}
return( FALSE );
}
int CImageObject::GetLastError( void )
{
return( m_nLastError );
}
BOOL CImageObject::Save( const char *pszFilename, int nType )
{
if( nType == -1 ) nType = ExtensionIndex( pszFilename );
if( nType < IMAGETYPE_FIRSTTYPE || nType > IMAGETYPE_LASTTYPE ) return( FALSE );
m_nImageType = nType;
delete [] m_pszFilename;
m_pszFilename = new char [strlen(pszFilename)+1];
if( m_pszFilename != NULL ) strcpy( m_pszFilename, pszFilename );
switch( m_nImageType ){
case IMAGETYPE_BMP:
return( ::SaveBMP( pszFilename, m_hDib ) );
break;
case IMAGETYPE_GIF:
return( ::SaveGIF( pszFilename, m_hDib ) );
break;
case IMAGETYPE_JPG:
return( ::SaveJPG( pszFilename, m_hDib, m_nQuality ) );
break;
case IMAGETYPE_PCX:
return( ::SavePCX( pszFilename, m_hDib ) );
break;
case IMAGETYPE_TGA:
return( ::SaveTGA( pszFilename, m_hDib ) );
break;
case IMAGETYPE_TIF:
return( ::SaveTIF( pszFilename, m_hDib ) );
break;
}
return( TRUE );
}
int CImageObject::ExtensionIndex( const char *pszFilename )
{
int Index = 0;
char *pszExtension;
pszExtension = (char *) &pszFilename[strlen(pszFilename)-4];
while( szExtensions[Index][0] )
{
if( !stricmp( pszExtension, szExtensions[Index] ) ) return( Index + 1 );
Index++;
}
return( -1 );
}
int CImageObject::GetWidth( void )
{
return( m_nWidth );
}
int CImageObject::GetHeight( void )
{
return( m_nHeight );
}
int CImageObject::GetNumBits( void )
{
return( m_nBits );
}
int CImageObject::GetNumColors( void )
{
return( m_nColors );
}
BOOL CImageObject::GetPaletteData( RGBQUAD *pRGBPalette )
{
m_nLastError = IMAGELIB_HDIB_NULL;
if( m_hDib == NULL ) return( FALSE );
char *pTemp;
pTemp = (char *) ::GlobalLock( m_hDib );
m_nLastError = IMAGELIB_MEMORY_LOCK_ERROR;
if( pTemp == NULL ) return( FALSE );
memcpy( pRGBPalette, &pTemp[sizeof(BITMAPFILEHEADER)+sizeof(BITMAPINFOHEADER)], m_nPaletteBytes );
m_nLastError = IMAGELIB_SUCCESS;
::GlobalUnlock( m_hDib );
return( TRUE );
}
RGBQUAD *CImageObject::GetPaletteData( void )
{
m_nLastError = IMAGELIB_HDIB_NULL;
if( m_hDib == NULL ) return( NULL );
m_nLastError = IMAGELIB_NO_PALETTE_FOR_HIGH_COLOR;
if(
没有合适的资源?快使用搜索试试~ 我知道了~
资源推荐
资源详情
资源评论
收起资源包目录
仿真程序.rar (42个子文件)
实验二 CT重建实验报告.doc 300KB
仿真程序
test.bmp 65KB
StdAfx.cpp 207B
PhotoStar.suo 5KB
resource.h 13KB
ImageObject.cpp 55KB
PhotoStar.cpp 7KB
PhotoStarDoc.h 1KB
PhotoStar.clw 4KB
ImageLoad.lib 15KB
PhotoStar.ncb 161KB
PhotoStarView.cpp 12KB
PhotoStar.opt 55KB
MainFrm.h 1KB
PhotoStar.h 1KB
ImageLoad.dll 179KB
FilterSelectDlg.cpp 1KB
PhotoStar.plg 11KB
StdAfx.h 868B
PhotoStarView.h 2KB
Errors.h 828B
imageload.h 4KB
CTEmulate.cpp 10KB
MainFrm.cpp 2KB
ImageObject.h 6KB
PhotoStar.aps 58KB
PhotoStar.dsp 5KB
PhotoStar.rc 13KB
CTEmulate.h 1KB
res
Handshak.ico 766B
PhotoStarDoc.ico 1KB
vssver.scc 160B
Thumbs.db 9KB
desktop.ini 61B
ImageViewDoc.ico 1KB
PhotoStar.ico 766B
ImageView.rc2 401B
ChildFrm.cpp 2KB
ChildFrm.h 1KB
PhotoStarDoc.cpp 4KB
FilterSelectDlg.h 1KB
PhotoStar.dsw 639B
共 42 条
- 1
image_scu
- 粉丝: 4
- 资源: 2
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
- 1
- 2
前往页