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

📄 bitmap.cpp

📁 qt版的超级玛利
💻 CPP
字号:
//-----------------------------------------------------------------------------
//
// Copyright (C) July 24, 2000 by Zhang Yong
// Email: z-meng@yeah.net
// This source is available for distribution and/or modification
// only under the terms of the GPL license.
//
// The source is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// FITNESS FOR A PARTICULAR PURPOSE. See the GPL.txt for more details.
//
//-----------------------------------------------------------------------------


#include <vgagl.h>#include <vga.h>#include <stdio.h>#include "../bitmap.h"#define BI_RGB        0L#pragma pack(2)typedef struct { // bmfh     WORD    bfType;     DWORD   bfSize;     WORD    bfReserved1;     WORD    bfReserved2;     DWORD   bfOffBits; } BITMAPFILEHEADER; #pragma pack()typedef struct { // bmih     DWORD  biSize;     LONG   biWidth;     LONG   biHeight;     WORD   biPlanes;     WORD   biBitCount;     DWORD  biCompression;     DWORD  biSizeImage;     LONG   biXPelsPerMeter;     LONG   biYPelsPerMeter;     DWORD  biClrUsed;     DWORD  biClrImportant; } BITMAPINFOHEADER;  typedef struct { // rgbq     BYTE    rgbBlue;     BYTE    rgbGreen;     BYTE    rgbRed;     BYTE    rgbReserved; } RGBQUAD; CBitmap::CBitmap(){	m_width = m_height = 0;	m_bits = NULL;}void CBitmap::Release(){	if( m_bits )		delete []m_bits;		m_width = m_height = 0;	m_bits = NULL;}BOOL CBitmap::Load( char *filename ){	FILE *fp = fopen( filename, "rb" );	if( !fp )	{		printf( "Can not open file %s\n", filename );		return FALSE;	}	printf( "Loading %s...\n", filename );		BITMAPFILEHEADER	bf;	BITMAPINFOHEADER	bi;	RGBQUAD				rgb[256];	fread( &bf, sizeof(bf), 1, fp );	if( bf.bfType != 0x4d42 )	{		printf( "Not a bitmap file.\n" );		fclose( fp );		return FALSE;	}	fread( &bi, sizeof(bi), 1, fp );	m_width = bi.biWidth;	m_height = bi.biHeight;		if( bi.biBitCount != 8 || bi.biCompression != BI_RGB )	{		printf( "Not an uncompressed 256-color bitmap.\n" );		return FALSE;	}	fread( rgb, sizeof(RGBQUAD), 256, fp );		int size = bi.biWidth * bi.biHeight;	m_bits = new BYTE[size];	int offset = size;	for( int i = 0; i < bi.biHeight; i ++ )	{		offset -= bi.biWidth;		fread( m_bits + offset, bi.biWidth, 1, fp );	}	// since gl_putbox only support color 0 mask,	// we must translate manully	for( int i = 0; i < size; i ++ )	{		if( m_bits[i] == 0x01 )			m_bits[i] = 0x00;		else if( m_bits[i] == 0x00 )			m_bits[i] = 0x02;	}	fclose( fp );}void CBitmap::Draw( int x, int y, RECT &rc ){	int width = rc.right - rc.left;	int height = rc.bottom - rc.top;		BYTE *buf = new BYTE[ width * height ];	BYTE *dest = buf;	BYTE *src = m_bits + rc.top * m_width + rc.left;	for( int i = 0; i < height; i ++ )	{		memcpy( dest, src, width );		src += m_width;		dest += width;	}		gl_putboxmask( x, y, width, height, buf );		delete []buf;}

⌨️ 快捷键说明

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