亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? imagelist.cpp

?? diablo圖形引擎例子
?? CPP
?? 第 1 頁 / 共 3 頁
字號:
// ImageList.cpp: implementation of the ImageList class.
//
//////////////////////////////////////////////////////////////////////

#include "assert.h"
#include "stdio.h"
#include "DirectDraw.h"
#include "ImageList.h"

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

ImageList::ImageList()
{
	m_iTotalFrame=-1;
	m_lpDataBuffer=NULL;
	m_lpOffsetTable=NULL;
}

ImageList::~ImageList()
{
	if (m_lpDataBuffer!=NULL) delete m_lpDataBuffer;
	if (m_lpOffsetTable!=NULL) delete m_lpOffsetTable;

}

bool ImageList::Create(char *lpszFilename, bool bColorMode,int light)
{
	
	FILE *fp=fopen(lpszFilename,"rb");
	if ( fp == NULL ) return false;

	fseek(fp,0,SEEK_END);
	int size=ftell(fp)-sizeof(CGL_FILE_HEADER);
	//
	CGL_FILE_HEADER cglhdr;
	fseek(fp,0,SEEK_SET);
	fread(&cglhdr,sizeof(CGL_FILE_HEADER),1,fp);
	//
	m_lpOffsetTable= new DWORD [cglhdr.dwTotalFiles];
	fseek(fp,cglhdr.dwInfoTableOffset,SEEK_SET);
	fread(m_lpOffsetTable,cglhdr.dwTotalFiles,sizeof(DWORD),fp);

	m_lpDataBuffer = new WORD [size/2];
	assert(m_lpDataBuffer);
	
	fseek(fp,cglhdr.dwDataOffset,SEEK_SET);
	fread(m_lpDataBuffer,size,1,fp);
	
	m_iTotalFrame=cglhdr.dwTotalFiles;
	fclose(fp);

	SetLight(light);

	if(!bColorMode)
	{
		ConvertColorMode();
		m_dwAlphaMask_SHR1=MASK_MODE_565_SHR1;
		m_dwAlphaMask_SHR2=MASK_MODE_565_SHR2;
		m_dwAlphaMask_SHR3=MASK_MODE_565_SHR3;
	}
	else
	{
		m_dwAlphaMask_SHR1=MASK_MODE_555_SHR1;
		m_dwAlphaMask_SHR2=MASK_MODE_555_SHR2;
		m_dwAlphaMask_SHR3=MASK_MODE_555_SHR3;
	}
	return true;
}


void ImageList::ConvertColorMode()
{
	int index;
	for(index=0;index<m_iTotalFrame;index++)
	{
		
		int  ofs=m_lpOffsetTable[index]/2;
		WORD *s = m_lpDataBuffer+ofs;
		WORD Width  = *s++;
		WORD Height = *s++;
		while( 1 )
		{
			WORD c = *s++, count = c & BitDataMask;
			if( c == BitEndOfImageMask )	// 圖像結束
				break;			
			else
			if( c & BitWhiteLineMask )		// 空白行
			{
				//??
			} 
			else	
		    if(c & BitPixelMask)		// 像素點
			{
				
				for( int i=0; i<count; i++ ) 
				{
					WORD color=*s;//chang color
					WORD r,g,b;
					b=color & 0x1f;
					g=( color >> 5 ) & 0x1f;
					r=( color >>10 ) & 0x1f;
					g=g<<1;
					color= b | (g << 5) | (r << 11);
					*s=color;
					*s++;
				}


				
				//{
				 //*d++ = *s++;						
				//}
			}
		else
		if(c & BitTransparentMask) // 透明點
		{
						//d += count;
		}
		else
		if( c == BitEndOfLineMask )		// 行結束
		{
			//d //+= Gap;
			//d+=(SCREEN_WIDTH-Width);				
		}
		}
 
	} 
}




void ImageList::Draw(int index, int x, int y, WORD *lpBitmap, long lPitch)
{

	int  ofs=m_lpOffsetTable[index]/2;
	WORD *s = m_lpDataBuffer+ofs;
		

	WORD Width  = *s++;
	WORD Height = *s++;
	// 如果圖像不在可見范圍內,就不畫了
	if( (x + Width ) < 0 || x >= DisplayMode_Width || (y + Height) < 0 || y >= DisplayMode_Height) return;
	// 如果圖像完全在可見范圍內,就直接調用PutImage
	if( x >= 0 && (x + Width) < DisplayMode_Width && y >= 0 && (y + Height) < DisplayMode_Height )
	{
		WORD *d = lpBitmap + y * lPitch + x;
		while( 1 )
		{ 
			WORD c = *s++, count = c & BitDataMask;
			if( c == BitEndOfImageMask )	// 圖像結束
			break;			
			else
			if( c & BitWhiteLineMask )		// 空白行
			{ 
				d += lPitch * count;
			} 
			else
			if(c & BitPixelMask)		// 像素點
			{ 
				for( int i=0; i<count; i++ ) 
				{ 
					*d++ = *s++;						
				} 
			} 
			else 
			if(c & BitTransparentMask) // 透明點
			{ 
			 	d += count;
			} 
			else
			if( c == BitEndOfLineMask )		// 行結束
				{
					d+=(lPitch-Width);				
			}  
		}  
		return;
	}
	// 圖像只有部分可見,要考慮各個邊界相交的情況
	int ix=x, iy=y;	// 當前處理的行列坐標
	// 屏幕范圍以上不可見部分
	while( iy < 0 )
	{
		WORD c = *s++, count = c & BitDataMask;
		if( c == BitEndOfImageMask ) return;			// 圖像結束
		if( c & BitWhiteLineMask )			// 忽略空白行(通常在圖像頂部和底部)
		{
			iy +=count;
		}
		else if( c & BitPixelMask )		// 跳過圖像數據
		{
			s +=count;
		}
		else						// 忽略透明部分
		{
		}
		if( c & BitEndOfLineMask )		// 一行結束,換行
		{
			iy++;	
		}
	}
	// 屏幕可見范圍以內
	WORD *d = (WORD *)lpBitmap + iy * lPitch;
	if( ix > 0 && ix < DisplayMode_Width) d+=ix;
	while(iy<DisplayMode_Height)
	{
		WORD c = *s++, count = c & BitDataMask;
		if( c == BitEndOfImageMask ) return;		// 圖像結束
		if( c & BitWhiteLineMask )		// 忽略空白行(通常在圖像頂部和底部)
		{
			iy +=count;
			d += lPitch * count;
		}
		else						// 非空白行,要考慮如何畫
		{
			if( ix < 0  )
			{
				if( ix + count < 0 )	// 1 不畫 .... /
				{
					if( c & BitPixelMask ) s +=count;	// 忽略像素
					ix += count;
				}
				else					// 2 部分畫 ../..
				{
					if( c & BitPixelMask )
					{
						s += -ix;		// 忽略不可見部分
						ix += count;
						for( int i=0; i<ix; i++ ) *d++ = *s++;
					}
					else				// 透明部分
					{
						ix += count;
						d += ix;	
					}
				}
			}
			else if( ix >= DisplayMode_Width )			// 5 不畫	\ ....
			{
				if( c & BitPixelMask ) s +=count;		// 忽略像素
				// ix += count;						// 沒有必要,反正已經出界了
			}
			else // ( ix > 0 && ix <= GraphWidth )
			{
				if( ix + count >= DisplayMode_Width)	// 4 部分畫  ..\..`
				{
					if( c & BitPixelMask )
					{
						for( int i=ix; i<DisplayMode_Width; i++ ) *d++ = *s++;
						ix += count;
						s += (ix - DisplayMode_Width);		// 跳過超出部分
					}
					else
					{
						ix += count;
					}
				}
				else							// 3 全畫	 /....\`
				{
					if( c & BitPixelMask )				// 顯示圖像
					{
						for( int i=0; i<count; i++ ) *d++ = *s++;
					}
					else							// 跳過透明部分
					{
						d += count;
					}
					ix += count;
				}
			}
		}
		if( c & BitEndOfLineMask )		// 一行結束,換行
		{
			ix = x;
			iy++;
	
			d = (WORD *)lpBitmap + iy * lPitch;
			if( ix > 0 && ix < DisplayMode_Width ) d += ix;
		}
	}
}

void ImageList::DrawAlpha250(int index, int x, int y, WORD *lpBitmap, long lPitch)
{
	
	WORD mask1=m_dwAlphaMask_SHR1;
	WORD mask2=m_dwAlphaMask_SHR2;
	int  ofs=m_lpOffsetTable[index]/2;
	WORD *s = m_lpDataBuffer+ofs;

	WORD Width  = *s++;
	WORD Height = *s++;
	// 如果圖像不在可見范圍內,就不畫了
	if( (x + Width ) < 0 || x >= DisplayMode_Width || (y + Height) < 0 || y >= DisplayMode_Height) return;
	// 如果圖像完全在可見范圍內,就直接調用PutImage
	if( x >= 0 && (x + Width) < DisplayMode_Width && y >= 0 && (y + Height) < DisplayMode_Height )
	{
		WORD *d = lpBitmap + y * lPitch + x;
		while( 1 )
		{ 
			WORD c = *s++, count = c & BitDataMask;
			if( c == BitEndOfImageMask )	// 圖像結束
			break;			
			else
			if( c & BitWhiteLineMask )		// 空白行
			{ 
				d += lPitch * count;
			} 
			else
			if(c & BitPixelMask)		// 像素點
			{ 
				for( int i=0; i<count; i++ ) 
				{ 
					_asm
						{
							mov edi,d
							mov esi,s
							mov ax,[esi]
							shr ax,2
							and ax,mask2
							mov dx,[edi]
							mov bx,dx
							shr bx,1
							and bx,mask1
							shr dx,2
							and dx,mask2
							add dx,bx
							add ax,dx
							mov [edi],ax
						}
						d++;s++;
					//*d++ = *s++;						
				} 
			} 
			else 
			if(c & BitTransparentMask) // 透明點
			{ 
			 	d += count;
			} 
			else
			if( c == BitEndOfLineMask )		// 行結束
				{
					d+=(lPitch-Width);				
			}  
		}  
		return;
	}
	// 圖像只有部分可見,要考慮各個邊界相交的情況
	int ix=x, iy=y;	// 當前處理的行列坐標
	// 屏幕范圍以上不可見部分
	while( iy < 0 )
	{
		WORD c = *s++, count = c & BitDataMask;
		if( c == BitEndOfImageMask ) return;			// 圖像結束
		if( c & BitWhiteLineMask )			// 忽略空白行(通常在圖像頂部和底部)
		{
			iy +=count;
		}
		else if( c & BitPixelMask )		// 跳過圖像數據
		{
			s +=count;
		}
		else						// 忽略透明部分
		{
		}
		if( c & BitEndOfLineMask )		// 一行結束,換行
		{
			iy++;	
		}
	}
	// 屏幕可見范圍以內
	WORD *d = (WORD *)lpBitmap + iy * lPitch;
	if( ix > 0 && ix < DisplayMode_Width) d+=ix;
	while(iy<DisplayMode_Height)
	{
		WORD c = *s++, count = c & BitDataMask;
		if( c == BitEndOfImageMask ) return;		// 圖像結束
		if( c & BitWhiteLineMask )		// 忽略空白行(通常在圖像頂部和底部)
		{
			iy +=count;
			d += lPitch * count;
		}
		else						// 非空白行,要考慮如何畫
		{
			if( ix < 0  )
			{
				if( ix + count < 0 )	// 1 不畫 .... /
				{
					if( c & BitPixelMask ) s +=count;	// 忽略像素
					ix += count;
				}
				else					// 2 部分畫 ../..
				{
					if( c & BitPixelMask )
					{
						s += -ix;		// 忽略不可見部分
						ix += count;
						for( int i=0; i<ix; i++ ) 
						{
							_asm
							{ 
							mov edi,d
							mov esi,s
							mov ax,[esi]
							shr ax,2
							and ax,mask2
							mov dx,[edi]
							mov bx,dx
							shr bx,1
							and bx,mask1
							shr dx,2
							and dx,mask2
							add dx,bx
							add ax,dx
							mov [edi],ax
							}
							d++;s++;
							//*d++ = *s++;
						}
					}
					else				// 透明部分
					{
						ix += count;
						d += ix;	
					}
				}
			}
			else if( ix >= DisplayMode_Width )			// 5 不畫	\ ....
			{
				if( c & BitPixelMask ) s +=count;		// 忽略像素
				// ix += count;						// 沒有必要,反正已經出界了
			}
			else // ( ix > 0 && ix <= GraphWidth )
			{
				if( ix + count >= DisplayMode_Width)	// 4 部分畫  ..\..`
				{
					if( c & BitPixelMask )
					{
						for( int i=ix; i<DisplayMode_Width; i++ ) 
						{
							_asm
							{ 
							mov edi,d
							mov esi,s
							mov ax,[esi]
							shr ax,2
							and ax,mask2
							mov dx,[edi]
							mov bx,dx
							shr bx,1
							and bx,mask1
							shr dx,2
							and dx,mask2
							add dx,bx
							add ax,dx
							mov [edi],ax
							}
							d++;s++;
							//*d++ = *s++;
						}
						ix += count;
						s += (ix - DisplayMode_Width);		// 跳過超出部分
					}
					else
					{
						ix += count;
					}
				}
				else							// 3 全畫	 /....\`
				{
					if( c & BitPixelMask )				// 顯示圖像
					{
						for( int i=0; i<count; i++ ) 
						{
							_asm
							{ 
							mov edi,d
							mov esi,s
							mov ax,[esi]
							shr ax,2
							and ax,mask2
							mov dx,[edi]
							mov bx,dx
							shr bx,1
							and bx,mask1
							shr dx,2
							and dx,mask2
							add dx,bx
							add ax,dx
							mov [edi],ax
							}
							d++;s++;
							
						//	*d++ = *s++;
						}
					}
					else							// 跳過透明部分
					{
						d += count;
					}
					ix += count;
				}
			}
		}
		if( c & BitEndOfLineMask )		// 一行結束,換行
		{
			ix = x;
			iy++;
	
			d = (WORD *)lpBitmap + iy * lPitch;
			if( ix > 0 && ix < DisplayMode_Width ) d += ix;

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲精品视频免费观看| 久久久久久免费毛片精品| 高潮精品一区videoshd| 国产美女在线观看一区| 国产精品一品视频| 成人sese在线| 一本色道久久综合狠狠躁的推荐 | 日韩一区二区精品葵司在线| 欧美日韩另类一区| 91精品国产综合久久婷婷香蕉| 欧美一区二区三区在线观看视频| 欧美一级欧美一级在线播放| 日韩区在线观看| 久久伊人蜜桃av一区二区| 日本一区二区三区视频视频| 欧美男人的天堂一二区| 欧美日本一道本| 91黄色小视频| 精品一区二区三区视频| 午夜久久久久久电影| 蜜桃一区二区三区在线观看| 国产乱人伦精品一区二区在线观看 | 国产精品996| 92国产精品观看| 欧美日韩www| 久久久久久久久久看片| 1000部国产精品成人观看| 亚洲综合精品久久| 麻豆高清免费国产一区| 成人综合日日夜夜| 欧美群妇大交群中文字幕| 久久精品在线免费观看| 亚洲国产精品嫩草影院| 国产激情一区二区三区桃花岛亚洲| 99久久精品国产麻豆演员表| 666欧美在线视频| 日韩理论片网站| 精品一区二区三区免费播放| 色综合久久久久综合99| 26uuu精品一区二区| 一区二区三区久久| 国产福利一区二区三区在线视频| 欧美在线啊v一区| 日本一区免费视频| 蜜臀精品一区二区三区在线观看| 色猫猫国产区一区二在线视频| 日韩亚洲欧美一区二区三区| 亚洲色图第一区| 国产 日韩 欧美大片| 日韩欧美美女一区二区三区| 亚洲精品国产成人久久av盗摄| 国产麻豆视频一区二区| 欧美精品自拍偷拍| 亚洲精品成a人| 成人免费视频视频| 久久综合久久鬼色| 蜜臀av性久久久久av蜜臀妖精| 欧美影院一区二区| 亚洲欧美日韩人成在线播放| 成人精品一区二区三区中文字幕| 亚洲精品一区二区在线观看| 琪琪一区二区三区| 欧美夫妻性生活| 午夜在线成人av| 欧美日韩欧美一区二区| 一区二区三区 在线观看视频| 成人激情校园春色| 国产精品不卡在线| jlzzjlzz欧美大全| 欧美激情资源网| 国产.精品.日韩.另类.中文.在线.播放 | 国产精品久久久久久久久免费丝袜 | 久久综合狠狠综合久久综合88 | 欧美一区二区在线视频| 亚洲福中文字幕伊人影院| 在线视频欧美区| 亚洲愉拍自拍另类高清精品| 欧美羞羞免费网站| 亚洲成人一区二区| 欧美一区二区三区性视频| 天堂资源在线中文精品| 欧美一级久久久久久久大片| 久久丁香综合五月国产三级网站| 日韩免费观看高清完整版| 精品一区二区免费在线观看| 久久婷婷国产综合精品青草| 国产精品亚洲专一区二区三区 | 99久久久久久99| 亚洲人成伊人成综合网小说| 色www精品视频在线观看| 亚洲男人的天堂网| 在线成人免费视频| 极品美女销魂一区二区三区 | 日本不卡免费在线视频| 久久亚洲影视婷婷| 91丨九色丨蝌蚪富婆spa| 亚洲黄色av一区| 日韩精品一区国产麻豆| 国产成人精品亚洲午夜麻豆| 亚洲精品欧美二区三区中文字幕| 欧美日韩免费电影| 国产成人在线视频免费播放| 一区二区三区免费看视频| 91麻豆精品国产自产在线| 国产乱人伦偷精品视频免下载 | 国产成人免费xxxxxxxx| 亚洲免费看黄网站| 宅男噜噜噜66一区二区66| 国产成人精品免费视频网站| 亚洲一区二区三区国产| 日韩精品一区二区三区四区| 91在线云播放| 国产一区美女在线| 亚洲1区2区3区视频| 国产精品大尺度| 亚洲精品一线二线三线| 欧美无乱码久久久免费午夜一区| 国产精品一二一区| 天堂久久一区二区三区| 亚洲欧美精品午睡沙发| 欧美精品一区二区三区高清aⅴ| 99re这里只有精品首页| 精品亚洲国产成人av制服丝袜| 亚洲品质自拍视频网站| 国产清纯美女被跳蛋高潮一区二区久久w| 在线精品视频一区二区三四| 国产成人免费9x9x人网站视频| 亚洲成人av电影| 亚洲人快播电影网| 国产日产欧产精品推荐色| 日韩精品中文字幕一区| 欧美性高清videossexo| 99久久777色| 国产91丝袜在线播放0| 国产自产2019最新不卡| 久久精品国产一区二区三| 天堂久久久久va久久久久| 亚洲综合激情另类小说区| 亚洲欧美一区二区视频| 国产精品视频一二三| 国产亚洲1区2区3区| 久久这里都是精品| 欧美va亚洲va香蕉在线| 欧美一区二区日韩| 欧美一区二区三区免费| 3atv一区二区三区| 91精品国产综合久久精品性色| 欧美天天综合网| 欧美日本精品一区二区三区| 欧美精品在线视频| 91精品国产综合久久婷婷香蕉| 欧美妇女性影城| 日韩午夜激情免费电影| 91.com在线观看| 欧美va天堂va视频va在线| 精品国产凹凸成av人导航| 精品国产sm最大网站免费看| 26uuu成人网一区二区三区| 久久―日本道色综合久久| 国产午夜精品理论片a级大结局 | 91丝袜美女网| 在线观看欧美黄色| 9191成人精品久久| 精品av久久707| 日本一区二区三区电影| 国产精品国产三级国产有无不卡| 亚洲美女一区二区三区| 亚洲一区二区三区四区的| 秋霞午夜av一区二区三区| 九色|91porny| 色哟哟日韩精品| 欧美精品第一页| 精品福利在线导航| **欧美大码日韩| 亚洲国产精品一区二区久久| 免费人成精品欧美精品| 国产一区在线看| 99在线精品一区二区三区| 91久久精品日日躁夜夜躁欧美| 7777精品伊人久久久大香线蕉最新版| 欧美一区二区黄| 国产精品福利一区二区三区| 婷婷开心久久网| 国产不卡在线一区| 欧美午夜一区二区三区免费大片| 精品国产乱码久久久久久久| 成人免费小视频| 捆绑变态av一区二区三区| 色综合天天综合狠狠| 欧美一区二区三区视频在线| 国产精品免费观看视频| 日本欧美一区二区三区| 豆国产96在线|亚洲| 91九色最新地址| 国产精品美女久久久久aⅴ| 日韩精品成人一区二区在线| 97精品国产97久久久久久久久久久久| 欧美一卡在线观看| 亚洲精品欧美激情| 丰满亚洲少妇av|