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

📄 ximaiter.h

📁 在wince上的游戏模拟器的源码
💻 H
字号:
/* * File:	ImaIter.h * Purpose:	Declaration of the Platform Independent Image Base Class * Author:	Alejandro Aguilar Sierra * Created:	1995 * Copyright:	(c) 1995, Alejandro Aguilar Sierra <asierra(at)servidor(dot)unam(dot)mx> * * 07/08/2001 Davide Pizzolato - www.xdp.it * - removed slow loops * - added safe checks * * Permission is given by the author to freely redistribute and include * this code in any program as long as this credit is given where due. * * COVERED CODE IS PROVIDED UNDER THIS LICENSE ON AN "AS IS" BASIS, WITHOUT WARRANTY * OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, WITHOUT LIMITATION, WARRANTIES * THAT THE COVERED CODE IS FREE OF DEFECTS, MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE * OR NON-INFRINGING. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE COVERED * CODE IS WITH YOU. SHOULD ANY COVERED CODE PROVE DEFECTIVE IN ANY RESPECT, YOU (NOT * THE INITIAL DEVELOPER OR ANY OTHER CONTRIBUTOR) ASSUME THE COST OF ANY NECESSARY * SERVICING, REPAIR OR CORRECTION. THIS DISCLAIMER OF WARRANTY CONSTITUTES AN ESSENTIAL * PART OF THIS LICENSE. NO USE OF ANY COVERED CODE IS AUTHORIZED HEREUNDER EXCEPT UNDER * THIS DISCLAIMER. * * Use at your own risk! * ========================================================== */#if !defined(__ImaIter_h)#define __ImaIter_h#include "ximage.h"#include "ximadefs.h"class CImageIterator{friend class CxImage;protected:	int Itx, Ity;		// Counters	int Stepx, Stepy;	BYTE* IterImage;	//  Image pointer	CxImage *ima;public:	// Constructors	CImageIterator ( void );	CImageIterator ( CxImage *image );	operator CxImage* ();	// Iterators	BOOL ItOK ();	void Reset ();	void Upset ();	void SetRow(BYTE *buf, int n);	void GetRow(BYTE *buf, int n);	BYTE GetByte( ) { return IterImage[Itx]; }	void SetByte(BYTE b) { IterImage[Itx] = b; }	BYTE* GetRow(void);	BYTE* GetRow(int n);	BOOL NextRow();	BOOL PrevRow();	BOOL NextByte();	BOOL PrevByte();	void SetSteps(int x, int y=0) {  Stepx = x; Stepy = y; }	void GetSteps(int *x, int *y) {  *x = Stepx; *y = Stepy; }	BOOL NextStep();	BOOL PrevStep();	void SetY(int y);	/* AD - for interlace */	int  GetY() {return Ity;}	BOOL GetCol(BYTE* pCol, DWORD x);	BOOL SetCol(BYTE* pCol, DWORD x);};/////////////////////////////////////////////////////////////////////inlineCImageIterator::CImageIterator(void){	ima = 0;	IterImage = 0;	Itx = Ity = 0;	Stepx = Stepy = 0;}/////////////////////////////////////////////////////////////////////inlineCImageIterator::CImageIterator(CxImage *imageImpl): ima(imageImpl){	if (ima) IterImage = ima->GetBits();	Itx = Ity = 0;	Stepx = Stepy = 0;}/////////////////////////////////////////////////////////////////////inlineCImageIterator::operator CxImage* (){	return ima;}/////////////////////////////////////////////////////////////////////inline BOOL CImageIterator::ItOK (){	if (ima) return ima->IsInside(Itx, Ity);	else	 return FALSE;}/////////////////////////////////////////////////////////////////////inline void CImageIterator::Reset(){	if (ima) IterImage = ima->GetBits();	else	 IterImage=0;	Itx = Ity = 0;}/////////////////////////////////////////////////////////////////////inline void CImageIterator::Upset(){	Itx = 0;	Ity = ima->GetHeight()-1;	IterImage = ima->GetBits() + ima->GetEffWidth()*(ima->GetHeight()-1);}/////////////////////////////////////////////////////////////////////inline BOOL CImageIterator::NextRow(){	if (++Ity >= (int)ima->GetHeight()) return 0;	IterImage += ima->GetEffWidth();	return 1;}/////////////////////////////////////////////////////////////////////inline BOOL CImageIterator::PrevRow(){	if (--Ity < 0) return 0;	IterImage -= ima->GetEffWidth();	return 1;}/* AD - for interlace */inline void CImageIterator::SetY(int y){	if ((y < 0) || (y > (int)ima->GetHeight())) return;	Ity = y;	IterImage = ima->GetBits() + ima->GetEffWidth()*y;}/////////////////////////////////////////////////////////////////////inline void CImageIterator::SetRow(BYTE *buf, int n){	if (n<0) n = (int)ima->GetEffWidth();	else n = min(n,(int)ima->GetEffWidth());	if (IterImage) memcpy(IterImage,buf,n);}/////////////////////////////////////////////////////////////////////inline void CImageIterator::GetRow(BYTE *buf, int n){	if ((buf!=NULL)&&(n>0)) memcpy(buf,IterImage,n);}/////////////////////////////////////////////////////////////////////inline BYTE* CImageIterator::GetRow(){	return IterImage;}/////////////////////////////////////////////////////////////////////inline BYTE* CImageIterator::GetRow(int n){	SetY(n);	return IterImage;}/////////////////////////////////////////////////////////////////////inline BOOL CImageIterator::NextByte(){	if (++Itx < (int)ima->GetEffWidth()) return 1;	else		if (++Ity < (int)ima->GetHeight()){			IterImage += ima->GetEffWidth();			Itx = 0;			return 1;		} else			return 0;}/////////////////////////////////////////////////////////////////////inline BOOL CImageIterator::PrevByte(){  if (--Itx >= 0) return 1;  else	  if (--Ity >= 0){		  IterImage -= ima->GetEffWidth();		  Itx = 0;		  return 1;	  } else		  return 0;}/////////////////////////////////////////////////////////////////////inline BOOL CImageIterator::NextStep(){	Itx += Stepx;	if (Itx < (int)ima->GetEffWidth()) return 1;	else {		Ity += Stepy;		if (Ity < (int)ima->GetHeight()){			IterImage += ima->GetEffWidth();			Itx = 0;			return 1;		} else			return 0;	}}/////////////////////////////////////////////////////////////////////inline BOOL CImageIterator::PrevStep(){	Itx -= Stepx;	if (Itx >= 0) return 1;	else {       		Ity -= Stepy;		if (Ity >= 0 && Ity < (int)ima->GetHeight()) {			IterImage -= ima->GetEffWidth();			Itx = 0;			return 1;		} else			return 0;	}}/////////////////////////////////////////////////////////////////////inline BOOL CImageIterator::GetCol(BYTE* pCol, DWORD x){	if ((pCol==0)||(ima->GetBpp()<8)||(x>=ima->GetWidth()))		return 0;	DWORD h = ima->GetHeight();	DWORD line = ima->GetEffWidth();	BYTE bytes = ima->GetBpp()>>3;	BYTE* pSrc;	for (DWORD y=0;y<h;y++){		pSrc = ima->GetBits(y) + x*bytes;		for (BYTE w=0;w<bytes;w++){			*pCol++=*pSrc++;		}	}	return 1;}/////////////////////////////////////////////////////////////////////inline BOOL CImageIterator::SetCol(BYTE* pCol, DWORD x){	if ((pCol==0)||(ima->GetBpp()<8)||(x>=ima->GetWidth()))		return 0;	DWORD h = ima->GetHeight();	DWORD line = ima->GetEffWidth();	BYTE bytes = ima->GetBpp()>>3;	BYTE* pSrc;	for (DWORD y=0;y<h;y++){		pSrc = ima->GetBits(y) + x*bytes;		for (BYTE w=0;w<bytes;w++){			*pSrc++=*pCol++;		}	}	return 1;}/////////////////////////////////////////////////////////////////////#endif

⌨️ 快捷键说明

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