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

📄 pgefont.cpp

📁 使ppc屏幕变成黑白的程序
💻 CPP
字号:
// PGEFont.cpp: implementation of the CPGEFont class.
//
//////////////////////////////////////////////////////////////////////

#include "PGEFont.h"

//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////

CPGEFont::CPGEFont()
{
	m_pbtFontData = NULL;
	m_pTxtOutBuf = NULL;
	memset(&m_FontInfo, 0, sizeof(PGE_FONTFILE_HEAD));
	m_dwClassID = PGE_FONT;
}

CPGEFont::~CPGEFont()
{
	SAFE_DELETE_ARY(m_pbtFontData);
	SAFE_DELETE_ARY(m_pTxtOutBuf);

}

PGE_RESULT CPGEFont::CreateFont(char* caFontFile)
{
	FILE* fp;
	fp = PGEFileOpen(caFontFile, "rb");
	if (!fp) return PGE_FAIL;
	if (m_pbtFontData != NULL) return PGE_FAIL;

	fread(&m_FontInfo, 1, sizeof(PGE_FONTFILE_HEAD), fp);

	m_pbtFontData = new BYTE[m_FontInfo.dwfileSize];

	fread(m_pbtFontData, 1, m_FontInfo.dwfileSize, fp);

	fclose(fp);
	
	m_pTxtOutBuf = new BYTE[m_FontInfo.btx*m_FontInfo.bty];


	return PGE_OK;

	
}

PGE_FONTFILE_HEAD* CPGEFont::GetFontInfo()
{
	return &m_FontInfo;
}

BYTE* CPGEFont::GetText(BYTE btPage, BYTE btPos)
{
	// memset(m_pTxtOutBuf, 0, m_FontInfo.btx*m_FontInfo.bty*sizeof(WORD));

	BYTE by = btPage;
	BYTE bx = btPos;
	DWORD lOff = 0;
	if (by>=161 && bx>=161)
	{
		lOff = ((by-0xa1) * 94 + (bx-0xa1))*32;
	}
	else
	{
		lOff = (by + 155)*32;
	}
	

	BYTE btFontModelBuf[32];
	memcpy(btFontModelBuf, m_pbtFontData+lOff, 32);
	
	int iCount = 0;
	int ip, i;
	for (ip = 0; ip<32; ip++)
	{
		for (i=0; i<8; i++)
		{
			BYTE cBit = btFontModelBuf[ip]<<i;
			m_pTxtOutBuf[iCount] = cBit;
			iCount++;
		}
	}
	return m_pTxtOutBuf;
}

BYTE* CPGEFont::GetText(char* caStr)
{
	// memset(m_pTxtOutBuf, 0, m_FontInfo.btx*m_FontInfo.bty*sizeof(WORD));
	
	if (caStr[0] == 0) return NULL;

	BYTE by=caStr[0];
	BYTE bx = caStr[1];
	DWORD lOff = 0;
	
	if (by > 0x80)
	{
		by -= 0x81;
		bx -= 0x40;
		lOff =(by*0xbf+bx+0x81)<<5;
	}
	else
	{
		lOff = by<<5;
	}
	
	memcpy(btFontModelBuf, m_pbtFontData+lOff, 32);
	
	lOff = 0;
	for (by = 0; by<32; by++)
	{
		for (bx=0; bx<8; bx++)
		{
			m_pTxtOutBuf[lOff] = (btFontModelBuf[by]<<bx) & 0x80;
			lOff++;
		}
	}
	return m_pTxtOutBuf;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -