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

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

?? bmp24.cpp

?? 兔子走迷宮
?? CPP
字號:
// Bmp24.cpp: implementation of the CBmp24 class.
//
//////////////////////////////////////////////////////////////////////

#include "stdafx.h"
#include "Bmp24.h"
#include <stdio.h>
#include <wingdi.h>
#include<malloc.h>
//===================================================================================================================
void CBmp24::CreateBmp(long w,long h)
{
	//是不是已經用過了,先把原先的內存釋放了
	if(m_pBits!=NULL)		{free(m_pBits);			m_pBits=NULL;}
	m_BmpInf.bmiHeader.biSize = sizeof(BITMAPINFOHEADER);
	m_BmpInf.bmiHeader.biWidth = w;
	m_BmpInf.bmiHeader.biHeight = h;
	m_BmpInf.bmiHeader.biPlanes = 1;
	m_BmpInf.bmiHeader.biBitCount = 24;
	m_BmpInf.bmiHeader.biCompression = BI_RGB;
	m_BmpInf.bmiHeader.biSizeImage = w*h*3;
	m_BmpInf.bmiHeader.biXPelsPerMeter = 0;
	m_BmpInf.bmiHeader.biYPelsPerMeter = 0;
	m_BmpInf.bmiHeader.biClrUsed = 0;
	m_BmpInf.bmiHeader.biClrImportant = 0;
	m_pBits=(unsigned char*)malloc(w*h*3);
	memset(m_pBits,0,w*h*3);//新創建的圖片完全抹黑
}
//===================================================================================================================
bool CBmp24::LoadBmp(char *fileName)
{
	FILE *fp;
	BITMAPFILEHEADER bmpFileHeader;
	unsigned long count=0;
	//是不是已經用過了,先把原先的內存釋放了
	if(m_pBits!=NULL)		{free(m_pBits);			m_pBits=NULL;}
	//打開圖像文件
	if( (fp = fopen( fileName, "rb")) == NULL ) 
	{
		TRACE("無法打開文件: %s\n", fileName );
		return false;
	}
	//讀取圖像文件頭
 	if ((count=fread(&bmpFileHeader, 1, sizeof(bmpFileHeader), fp)) != sizeof(bmpFileHeader))
	{
		TRACE( "ERR004 讀取 BMP 文件頭失敗: count=%d\n", count);
				return false;
	}
	//如果不是圖像文件,下面也就沒戲了
	if(bmpFileHeader.bfType!='MB')
	{
		TRACE("不是BMP文件\n");
		return false;
	}
	//讀取圖像信息頭,是m_BmpInf.bmiHeader,而不是m_BmpInf,操!
 	if ((count=fread(&m_BmpInf.bmiHeader, 1, sizeof(BITMAPINFOHEADER), fp)) != sizeof(BITMAPINFOHEADER))
	{
		TRACE( "ERR004 讀取 BMP 信息失敗: count=%d\n", count);
				return false;
	}
	//如果不是24真彩位圖,下面還是沒戲
	if(m_BmpInf.bmiHeader.biBitCount!=24)
	{
		TRACE("不是24位BMP文件\n");
		return false;
	}
	//為了安全起見,重新計算圖像數據長度,因為有的圖的biSizeImage為零
	m_BmpInf.bmiHeader.biSizeImage=m_BmpInf.bmiHeader.biWidth*m_BmpInf.bmiHeader.biHeight*3;


	m_pBits=(unsigned char*)malloc(m_BmpInf.bmiHeader.biSizeImage);
	if(!m_pBits)//居然沒申請到內存,我無語了,嗚嗚!
	{
		TRACE("ERROR CBmp24::LoadBmp malloc\n");
		return false;
	}
	
	//讀取圖像的像素數據
 	if ((count=fread(m_pBits, 1, m_BmpInf.bmiHeader.biSizeImage, fp)) != m_BmpInf.bmiHeader.biSizeImage)
	{
		TRACE( "ERR004 讀取 BMP 文件數據失敗: count=%d\n", count);
		return false;
	}
	fclose(fp);//讀完了,請關上文件,謝謝!
	return true;//終于成功了,操!
}
//===================================================================================================================
bool	CBmp24::LoadBmp(char *fileName,COLORREF cTransparentColor)
{
	m_bTrasparented=1;		//是否需要透明顯示
	m_TransparentColor=cTransparentColor;		//透明色
	return LoadBmp(fileName);
}
//===================================================================================================================
//將全圖在hdc指向的窗口顯示,(x,y,w,h)為窗口上的矩形
void CBmp24::DrawDC(HDC hdc,int x,int y,int w,int h)
{
	StretchDIBits(hdc,x,y,w,h,0,0,m_BmpInf.bmiHeader.biWidth,m_BmpInf.bmiHeader.biHeight,m_pBits,&m_BmpInf,DIB_RGB_COLORS,SRCCOPY);
}
//===================================================================================================================
void CBmp24::DrawBmp(CBmp24*p,int tx,int ty,int Idx,int effectFlag)
{
	if(!m_bTrasparented)	DrawBmpEx(p,tx,ty,0,0,m_BmpInf.bmiHeader.biWidth,m_BmpInf.bmiHeader.biHeight,effectFlag);
	else	DrawBmpEx(p,tx,ty,0,0,m_BmpInf.bmiHeader.biWidth,m_BmpInf.bmiHeader.biHeight,effectFlag,m_TransparentColor);	
}
//==============================================================================================
//參數:	CBmp24* p		指向目標圖
//		int tx			在目標圖上開始畫圖的水平坐標
//		int ty			在目標圖上開始畫圖的垂直坐標
//		int	sx			本圖上需畫圖的水平起始坐標
//		int sy			本圖上需畫圖的垂直起始坐標
//		int w			本圖上需畫圖的水平長度
//		int h			本圖上需畫圖的垂直高度
//		int	flipType	畫圖的翻轉標志,0不翻轉,1水平翻轉,2垂直翻轉,3完全翻轉
//===============================================================================================
//功能:將本圖上的(sx,sy,w,h)矩形,畫到p指向的目標圖上,在目標圖上以坐標(tx,ty)開始花起
//		同時,flipType指定了畫圖時的翻轉操作。
//===============================================================================================
void	CBmp24::DrawBmpEx(CBmp24*p,int tx,int ty,int sx,int sy,int w,int h,int flipType)
{
	int i,j,t,s,cx=w,cy=h;
	long w1=p->GetWidth();
	long h1=p->GetHeight();
	long w0=m_BmpInf.bmiHeader.biWidth;
	long h0=m_BmpInf.bmiHeader.biHeight;
	unsigned char* pBits1=p->GetDateBits();
	unsigned char* pBits0=this->GetDateBits();
	if(tx+cx>=w1)	cx=w1-tx;//先檢查下是否超界
	if(ty+cy>=h1)	cy=h1-ty;
	if(tx<0)	{sx-=tx;cx=cx+tx;tx=0;}
	if(ty<0)	{sy-=ty;cy=cy+ty;ty=0;}
	for(j=0;j<cy;j++)
		for(i=0;i<cx;i++)
		{	
			t=((h1-ty-j-1)*w1+tx+i)*3;
			s=FlipCount(flipType,sx,sy,cx,cy,j,i);
			pBits1[t+0]=pBits0[s+0];
			pBits1[t+1]=pBits0[s+1];
			pBits1[t+2]=pBits0[s+2];
		}
}
//==============================================================================================
//與上面的函數唯一的區別,就是cTransparentColor指定的透明色不會被畫
void	CBmp24::DrawBmpEx(CBmp24*p,int tx,int ty,int sx,int sy,int w,int h,int flipType,COLORREF cTransparentColor)
{
	int i,j,t,s,cx=w,cy=h;
	long w1=p->GetWidth();
	long h1=p->GetHeight();
	long w0=m_BmpInf.bmiHeader.biWidth;
	long h0=m_BmpInf.bmiHeader.biHeight;
	unsigned char* pBits1=p->GetDateBits();
	unsigned char* pBits0=this->GetDateBits();
	unsigned char *pTrasparentColor=(unsigned char *)&cTransparentColor;
	if(tx+cx>=w1)	cx=w1-tx;
	if(ty+cy>=h1)	cy=h1-ty;
	if(tx<0)	{sx-=tx;cx=cx+tx;tx=0;}
	if(ty<0)	{sy-=ty;cy=cy+ty;ty=0;}
	for(j=0;j<cy;j++)
		for(i=0;i<cx;i++)
		{
			t=((h1-ty-j-1)*w1+tx+i)*3;
			s=FlipCount(flipType,sx,sy,cx,cy,j,i);
			if(pTrasparentColor[2]!=pBits0[s+0]|| pTrasparentColor[1]!=pBits0[s+1]|| pTrasparentColor[0]!=pBits0[s+2])
			{
				pBits1[t+0]=pBits0[s+0];
				pBits1[t+1]=pBits0[s+1];
				pBits1[t+2]=pBits0[s+2];
			}
		}
}
//==============================================================================================
//參數:	type			畫圖的翻轉標志,0不翻轉,1水平翻轉,2垂直翻轉,3完全翻轉
//		x				本圖上需畫圖的水平起始坐標
//		y				本圖上需畫圖的垂直起始坐標
//		w				本圖上需畫圖的水平長度
//		h				本圖上需畫圖的垂直高度
//		i				在本圖上需畫圖的矩形區域中的水平坐標(相對小矩形的)
//		j				在本圖上需畫圖的矩形區域中的垂直坐標(相對小矩形的)
//==============================================================================================
//功能:指定矩形(x,y,w,h)中的坐標(i,j),及所需要翻轉的標志,算出該點在本圖像素緩沖區中的位置。
//===============================================================================================
int		CBmp24::FlipCount(int type,int x,int y,int w,int h,int j,int i)
{
	int W=m_BmpInf.bmiHeader.biWidth;
	int H=m_BmpInf.bmiHeader.biHeight;
	if(type==0)//不翻轉
	{
		y=y+j;
		x=x+i;
	}
	else if(type==1)//水平翻轉
	{
		y=y+j;
		x=x+w-i-1;
	}
	else if(type==2)//垂直翻轉
	{
		y=y+h-j-1;
		x=x+i;
	}
	else if(type==3) //完全翻轉
	{
		y=y+h-j-1;
		x=x+w-i-1;
	}
	return ((H-y-1)*W+x)*3;
}
//===================================================================================================================
void	CBmp24::MemsetBits(int i)
{
	memset(m_pBits,i,m_BmpInf.bmiHeader.biSizeImage);
}
//===================================================================================================================
CBmp24::CBmp24()
{
	memset(&m_BmpInf,0,sizeof(m_BmpInf));
	m_pBits=NULL;
}
//===================================================================================================================
CBmp24::~CBmp24()
{
	if(m_pBits!=NULL)
	{
		free(m_pBits);
		m_pBits=NULL;
	}
}
//=====================組圖處理的具體實現=====================================================
bool	CMultiBmp::LoadBmp(char *fileName,int colum,int row)
{
	bool r;
	m_Colum=colum;				//有多少列小圖
	m_Row=row;					//有多少行小圖
	m_bTrasparented=0;
	r=CBmp24::LoadBmp(fileName);
	m_SubWidth	=	m_BmpInf.bmiHeader.biWidth/m_Colum;
	m_SubHeight	=	m_BmpInf.bmiHeader.biHeight/m_Row;
	return r; 
}
//===================================================================================================================
bool	CMultiBmp::LoadBmp(char *fileName,int colum,int row,COLORREF cTransparentColor)
{
	bool r;
	m_Colum=colum;				//有多少列小圖
	m_Row=row;					//有多少行小圖
	m_bTrasparented=1;
	m_TransparentColor=cTransparentColor;
	r=CBmp24::LoadBmp(fileName);
	m_SubWidth	=	m_BmpInf.bmiHeader.biWidth/m_Colum;
	m_SubHeight	=	m_BmpInf.bmiHeader.biHeight/m_Row;
	return r; 
}
//===================================================================================================================
void	CMultiBmp::DrawBmp(CBmp24*p,int tx,int ty,int Idx,int effectFlag)
{
	Idx=Idx%(m_Row*m_Colum);
	int c=Idx%m_Colum;
	int r=Idx/m_Colum;
	int w=m_SubWidth;
	int h=m_SubHeight;
	if(!m_pBits) return;
	if(!m_bTrasparented)	DrawBmpEx(p,tx,ty,c*w,r*h,w,h,effectFlag);
	else	DrawBmpEx(p,tx,ty,c*w,r*h,w,h,effectFlag,m_TransparentColor);
}
//===================================================================================================================
 void	CMultiBmp::DrawDC(HDC hdc,int x,int y,int w,int h,int Idx)
 {
	int c=Idx%m_Colum;
	int r=m_Row-Idx/m_Colum-1;//bmp圖像是按照從下往上放的
	StretchDIBits(hdc,x,y,w,h,c*m_SubWidth,r*m_SubHeight,m_SubWidth,m_SubHeight,m_pBits,&m_BmpInf,DIB_RGB_COLORS,SRCCOPY);
 }
//===================================================================================================================
CMultiBmp::CMultiBmp()
{
	memset(&m_BmpInf,0,sizeof(m_BmpInf));
	m_pBits=NULL;
}
//===================================================================================================================
CMultiBmp::~CMultiBmp()
{
	if(m_pBits!=NULL)
	{
		free(m_pBits);
		m_pBits=NULL;
	}
}
//===================================================================================================================

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
精品国产精品一区二区夜夜嗨| 精品国产乱码久久久久久闺蜜 | 国产精品久久看| 五月天欧美精品| 色婷婷综合视频在线观看| 久久久久综合网| 国产乱码一区二区三区| 亚洲欧美一区二区三区孕妇| 国产尤物一区二区| 日韩精品一区二区三区在线观看| 亚洲自拍偷拍麻豆| 欧美日韩成人综合| 91蜜桃网址入口| 日韩理论片中文av| 日本高清视频一区二区| 亚洲一区在线观看免费观看电影高清| 91久久精品一区二区三| 日韩国产精品大片| 国产视频911| 99久久婷婷国产精品综合| 亚洲欧美一区二区不卡| 欧美亚日韩国产aⅴ精品中极品| 日本一区二区三区久久久久久久久不 | 国产精品久久三区| 日韩精品一区二区三区中文不卡 | 免费高清在线一区| 日韩一二在线观看| 国产91精品一区二区| 日韩欧美在线网站| 国产精品一区在线观看乱码 | 久久91精品国产91久久小草| 5月丁香婷婷综合| 国产呦精品一区二区三区网站| 久久奇米777| 色先锋aa成人| 色女孩综合影院| 蜜芽一区二区三区| 欧美电影免费提供在线观看| 99re热这里只有精品免费视频| 亚洲影视资源网| 狠狠色丁香久久婷婷综合丁香| 91精品国产综合久久香蕉麻豆| 国产成人精品一区二区三区四区| 久久综合色鬼综合色| 91激情在线视频| 粉嫩嫩av羞羞动漫久久久| 日韩高清不卡一区二区三区| 日韩免费视频一区| 欧美裸体bbwbbwbbw| 波多野结衣精品在线| 黑人巨大精品欧美一区| 日韩av中文字幕一区二区| 一区二区三区四区在线免费观看 | 成人听书哪个软件好| 日韩成人伦理电影在线观看| 亚洲天天做日日做天天谢日日欢 | 91精品国产一区二区三区蜜臀| 色婷婷久久久亚洲一区二区三区| 成人av在线资源网站| 免费在线观看视频一区| 免费成人av资源网| 偷拍与自拍一区| 午夜精品久久久久久久99水蜜桃| 亚洲小少妇裸体bbw| 欧美国产一区二区| 国产精品毛片久久久久久| 久久这里只精品最新地址| 91精品国产高清一区二区三区蜜臀 | 欧美亚洲国产一卡| 欧美日韩一本到| 欧美日韩aaa| 日韩一区二区中文字幕| 日韩欧美久久久| 欧美高清在线一区二区| 亚洲免费在线播放| 亚洲gay无套男同| 经典三级一区二区| 国产一区二区网址| 精品一区二区日韩| 国产成人在线免费| 欧美亚洲动漫精品| 中文av一区二区| 亚洲一区二区av在线| 秋霞影院一区二区| 久久av老司机精品网站导航| 丰满白嫩尤物一区二区| 欧美影视一区二区三区| 国产三级一区二区| 日韩精彩视频在线观看| 99久久er热在这里只有精品15| 国产福利精品一区二区| 久久精子c满五个校花| 午夜视频在线观看一区二区三区| 国产欧美精品日韩区二区麻豆天美| 欧美成人精品1314www| 欧美精品一区二区三区在线播放| 日韩精品一区国产麻豆| 国产精品激情偷乱一区二区∴| av不卡一区二区三区| 欧洲色大大久久| 国产欧美日韩精品一区| 香蕉久久一区二区不卡无毒影院| 成人av第一页| 26uuu成人网一区二区三区| 一色桃子久久精品亚洲| 六月婷婷色综合| 91精品久久久久久久久99蜜臂 | 日韩欧美在线影院| 久久精品视频免费观看| 亚洲亚洲精品在线观看| 精品一区二区精品| 日韩欧美成人激情| 亚洲成人免费av| 在线播放国产精品二区一二区四区| 国产精品污污网站在线观看| 国产成人免费视| 中文字幕av一区 二区| 国产精品91xxx| 国产精品免费av| 9l国产精品久久久久麻豆| 18成人在线视频| 欧美综合亚洲图片综合区| 亚洲国产成人av| 日韩欧美aaaaaa| www.成人在线| 亚洲电影一区二区三区| 欧美激情一区二区| 555夜色666亚洲国产免| 国产99精品在线观看| 亚洲第一福利一区| 国产精品女同一区二区三区| 欧美一区午夜视频在线观看 | 亚洲综合免费观看高清完整版| 2024国产精品视频| 欧美理论电影在线| 欧美三级一区二区| 成人午夜免费av| 国产激情一区二区三区| 麻豆精品在线播放| 午夜精品免费在线| 亚洲bt欧美bt精品777| 亚洲一区二区三区四区五区黄 | 中文字幕在线观看不卡| 久久久久青草大香线综合精品| 欧美日韩国产经典色站一区二区三区| 高清成人免费视频| 国产成人一级电影| 成人综合婷婷国产精品久久蜜臀| 国产高清精品在线| 福利视频网站一区二区三区| 国产精品一区二区在线观看不卡 | 成人午夜在线免费| 麻豆精品国产91久久久久久| 亚洲一二三四区不卡| 国产精品伦理在线| 亚洲日本在线a| 亚洲chinese男男1069| 七七婷婷婷婷精品国产| 精品无人码麻豆乱码1区2区 | 国产精品国产三级国产a| 国产精品国产精品国产专区不蜜| 国产精品成人一区二区三区夜夜夜 | 国产真实乱对白精彩久久| 国产精品一区免费在线观看| 99精品视频中文字幕| 欧美精品乱人伦久久久久久| 精品粉嫩超白一线天av| 国产精品白丝在线| 日本亚洲欧美天堂免费| 成人免费不卡视频| 欧美精品欧美精品系列| 亚洲色图丝袜美腿| 国产一区在线不卡| 在线精品视频免费观看| 久久久精品蜜桃| 五月天亚洲精品| 一本色道**综合亚洲精品蜜桃冫 | 欧美精品v国产精品v日韩精品| 久久夜色精品一区| 偷拍一区二区三区| 91久久精品午夜一区二区| www国产成人免费观看视频 深夜成人网| 亚洲精品ww久久久久久p站| 国产91精品在线观看| 欧美一区二区三区婷婷月色| 亚洲综合成人在线视频| 99re6这里只有精品视频在线观看 99re8在线精品视频免费播放 | 欧美系列在线观看| 亚洲精品国产高清久久伦理二区 | 亚洲一二三四在线观看| 精品一区二区三区在线观看国产| 欧美色倩网站大全免费| 亚洲欧美另类小说视频| 99国产精品国产精品毛片| 日本一二三不卡| 不卡av在线网| 亚洲图片你懂的| 欧美视频一区二区三区| 亚洲愉拍自拍另类高清精品| 欧美日韩在线直播|