📄 tga.cpp
字号:
#include "stdafx.h"
#include "Tga.h"
#include "windowsx.h"
CTga::CTga()
{
identification=0;
colormap_type=0;
image_type=0;
width=0;
height=0;
data=NULL;
}
CTga::~CTga()
{
GlobalFreePtr(data);
}
CTga::CTga(CArchive& ar)
{
//Load the bitmap and initialize
//the class's data members.
identification=0;
colormap_type=0;
image_type=0;
origin_x=0;
origin_y=0;
width=0;
height=0;
data=NULL;
CFile *file=ar.GetFile();
LoadBitmapFile(file);
}
void CTga::LoadFile(const char *fileName)
{
if(data) GlobalFreePtr(data);
CFile file(fileName, CFile::modeRead);
CFileException fileExcep(CFileException::none, -1 );
file.SeekToBegin( );
LoadBitmapFile(&file);
file.Close();
}
void CTga::LoadBitmapFile(CFile *file)
{
file->Read((void*)&identification,1);
file->Read((void*)&colormap_type,1);
file->Read((void*)&image_type ,1);
switch(image_type)
{
case 0:
AfxMessageBox("not image data included");
return;
break;
case 1:
ReadType1Data(file);
break;
case 2:
ReadType2Data(file);
break;
case 3:
ReadType3Data(file);
break;
case 9:
ReadType9Data(file);
break;
case 10:
ReadType10Data(file);
break;
case 11:
ReadType11Data(file);
break;
case 32:
ReadType32Data(file);
break;
case 33:
ReadType33Data(file);
break;
default:
AfxMessageBox("wrong image type");
exit(0);
}
return ;
}
BYTE CTga::GetPixelSize()
{
return pixel_size;
}
BYTE* CTga::GetImageData()
{
return data;
}
UINT CTga::GetImageWidth()
{
return width;
}
UINT CTga::GetImageHeight()
{
return height;
}
void CTga::ReadType1Data(CFile *file)
{
AfxMessageBox("had not done");
exit(0);
}
void CTga::ReadType2Data(CFile *file)
{
ASSERT(colormap_type==0);
if(colormap_type){
}
else{
file->Seek(5,CFile::current);
}
file->Read((void*)&origin_x,2);
file->Read((void*)&origin_y,2);
file->Read((void*)&width,2);
file->Read((void*)&height,2);
file->Read((void*)&pixel_size,1);
file->Read((void*)&descriptor,1);
BYTE mask=descriptor & 13;
switch(pixel_size){
case 24:
ASSERT(mask==0);
break;
case 32:
ASSERT(mask==8);
break;
}
ASSERT((descriptor & 16)==0);
ASSERT((descriptor & 32)==0);
mask=descriptor>>6;
ASSERT(mask==0);
if(colormap_type){
//read colormap type.
}
switch(pixel_size){
case 16:
data=(BYTE*)GlobalAllocPtr(GMEM_MOVEABLE,2*width*height*sizeof(BYTE));
file->Read((void*)data,2*width*height);
break;
case 24:
data=(BYTE*)GlobalAllocPtr(GMEM_MOVEABLE,3*width*height*sizeof(BYTE));
file->Read((void*)data,3*width*height);
break;
case 32:
data=(BYTE*)GlobalAllocPtr(GMEM_MOVEABLE,4*width*height*sizeof(BYTE));
file->Read((void*)data,4*width*height);
break;
}
}
void CTga::ReadType3Data(CFile *file)
{
AfxMessageBox("had not done");
exit(0);
}
void CTga::ReadType9Data(CFile *file)
{
AfxMessageBox("had not done");
exit(0);
}
void CTga::ReadType10Data(CFile *file)
{
AfxMessageBox("had not done");
exit(0);
}
void CTga::ReadType11Data(CFile *file)
{
AfxMessageBox("had not done");
exit(0);
}
void CTga::ReadType32Data(CFile *file)
{
AfxMessageBox("had not done");
exit(0);
}
void CTga::ReadType33Data(CFile *file)
{
AfxMessageBox("had not done");
exit(0);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -