⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 tga.cpp

📁 边缘检测原代码. 边缘检测原代码.
💻 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 + -