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

? 歡迎來(lái)到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? dib.cpp

?? 本程序根據(jù)用戶不同的需求設(shè)計(jì)窗口的背景
?? CPP
?? 第 1 頁(yè) / 共 2 頁(yè)
字號(hào):
				for(j=0; j < nWidth; j++,srcPtr++,destPtr++)
				{
					if(colors[*srcPtr]) *destPtr=*srcPtr;
				}
			}
		}
	}
}

unsigned char *CDIB::GetLinePtr(int line)
{
/*unsigned char *ptr;
	ptr = m_pBits + (height-line-1)*bytes;
	return ptr;*/
	return m_pLinePtr[line];
}
	
BOOL CDIB::CopyDIB(CDIB& dib)
{
	if(Create(dib.m_pInfo->bmiHeader))
	{
		SetPalette(dib.m_pRGB);
		memcpy(m_pBits,dib.m_pBits,height*bytes);
		return TRUE;
	}
	return FALSE;
}

void CDIB::ReplaceColor(unsigned char oldColor,unsigned char newColor)
{
int i,j;
unsigned char *ptr;	
	for(i=0; i < height; i++)
	{
		ptr = GetLinePtr(i);
		for(j=0; j < width; j++)
		{
			if(ptr[j] == oldColor) ptr[j] = newColor;
		}
	}
}


CDIB& CDIB::operator=(CDIB& dib)
{
	CopyDIB(dib);
	return *this;
}

HANDLE CDIB::GetDIBits(int nStartX,int nStartY,int nCx,int nCy)
{
	if(nStartX == -1)
	{
		nStartX = nStartY=0;
		nCx = width;
		nCy = height;
		CDIB dib;
		dib.Create(nCx,nCy,8);
		dib.BitBlt(0,0,nCx,nCy,*this,0,0);
		dib.SetPalette(m_pRGB);
		return dib.DIBHandle();
	}
	return DIBHandle();
}

DWORD CDIB::GetDIBSize()
{
	return sizeof(BITMAPINFOHEADER) + sizeof(RGBQUAD)*GetPaletteSize() + bytes*height;
}

HANDLE CDIB::DIBHandle()
{
int nSize;
HANDLE hMem;
	nSize = sizeof(BITMAPINFOHEADER) + sizeof(RGBQUAD)*GetPaletteSize() + bytes*height;
	hMem = GlobalAlloc(GMEM_DDESHARE | GMEM_MOVEABLE,nSize);
	if(hMem  == NULL) return NULL;
UCHAR *lpVoid,*pBits;
LPBITMAPINFOHEADER pHead;
RGBQUAD *pRgb;
	lpVoid = (UCHAR *)GlobalLock(hMem);
	pHead = (LPBITMAPINFOHEADER )lpVoid;
	memcpy(pHead,&m_pInfo->bmiHeader,sizeof(BITMAPINFOHEADER));
	pRgb = (RGBQUAD *)(lpVoid + sizeof(BITMAPINFOHEADER) );
	memcpy(pRgb,m_pRGB,sizeof(RGBQUAD)*GetPaletteSize());
	pBits = lpVoid + sizeof(BITMAPINFOHEADER) + sizeof(RGBQUAD)*GetPaletteSize();
	memcpy(pBits,m_pBits,height*bytes);
	GlobalUnlock(lpVoid);
	return hMem;
}

BOOL CDIB::CreateFromHandle(HANDLE hMem,int bits)
{
	DestroyDIB();
UCHAR *lpVoid,*pBits;
LPBITMAPINFOHEADER pHead;
RGBQUAD *pRgb;
	lpVoid = (UCHAR *)GlobalLock(hMem);
	pHead = (LPBITMAPINFOHEADER )lpVoid;
	width = pHead->biWidth;
	height = pHead->biHeight;
	m_nBits = pHead->biBitCount;
	if(pHead->biCompression != BI_RGB) 
	{
		GlobalUnlock(lpVoid);
		return FALSE;
	}
	if(pHead->biBitCount >= 15)
	{
		if(pHead->biBitCount != 24) 
		{
			GlobalUnlock(lpVoid);
			return FALSE;
		}
	}
	if(!Create(*pHead))
	{
		GlobalUnlock(lpVoid);
		return FALSE;
	}
	pRgb = (RGBQUAD *)(lpVoid + sizeof(BITMAPINFOHEADER) );
	memcpy(m_pRGB,pRgb,sizeof(RGBQUAD)*GetPaletteSize());
	pBits = lpVoid + sizeof(BITMAPINFOHEADER) + sizeof(RGBQUAD)*GetPaletteSize();
	memcpy(m_pBits,pBits,height*bytes);
	GlobalUnlock(lpVoid);
	return TRUE;
}

void CDIB::UseGamma(float fg,BOOL bUse)
{
	m_bUseGamma = bUse;
	m_fOldGamma = m_fGamma;
	m_fGamma = fg;
	CreateGammaCurve();
}


void CDIB::CreateGammaCurve()
{
int i;
	for(i=0;i<256;++i)
	{
	    Gamma[i]=(int)(255 * pow((double)i/255,m_fGamma) + (double)0.5);
	}
}



void CDIB::GetPixel(UINT x,UINT y,int& pixel)
{
	ASSERT(x < (UINT)Width());
	ASSERT(y < (UINT)Height());
	if(x >= (UINT)Width()) return;
	if(y >= (UINT)Height()) return;
	pixel=(GetLinePtr(y))[x];
}

BOOL CDIB::Make8Bit(CDIB& dib)
{
int nBits;	
	ASSERT(Width() == dib.Width());
	ASSERT(Height() == dib.Height());
	nBits = dib.GetBitCount();
	switch(nBits)
	{
	case 1:
		return SwitchFromOne(dib);
		break;
	case 4:
		return SwitchFromFour(dib);
		break;
	case 8:
		return SwitchPalette(dib);
		break;
	case 24:
		return SwitchFrom24(dib);
		break;
	default:
		return FALSE;
	}
	return FALSE;
}

/*
BOOL CDIB::SwitchFrom24(CDIB& dib)
{
int i,j,w,h;
unsigned char *sPtr,*dPtr;
	w = Width();
	h = Height();
	memset(CachePtr,0,sizeof(CachePtr));
	for(i=0; i < h; i++)
	{
		dPtr = GetLinePtr(i);
		sPtr = dib.GetLinePtr(i);
		for(j=0 ; j < w; j++,dPtr++,sPtr+=3)
		{
			*dPtr = ClosestColor((RGBQUAD *)sPtr);
		}
	}
	return TRUE;
}
*/


BOOL CDIB::SwitchFromOne(CDIB& dib)
{
int i,n,j,w,h;
unsigned char *sPtr,*dPtr;
unsigned char cols[2];
	w = Width();
	h = Height();
	memset(CachePtr,0,sizeof(CachePtr));
	cols[0]=ClosestColor(dib.m_pRGB);
	cols[1]=ClosestColor(dib.m_pRGB+1);
	for(i=0; i < h; i++)
	{
		dPtr = GetLinePtr(i);
		sPtr = dib.GetLinePtr(i);
		for(j=0 ; j < w; j++,dPtr++)
		{
			if(!(sPtr[j>>3] & masktable[j&7])) *dPtr = cols[0];
			else *dPtr = cols[1];
		}
	}
	return TRUE;
}

BOOL CDIB::SwitchFromFour(CDIB& dib)
{
int i,n,j,w,h;
unsigned char *sPtr,*dPtr;
unsigned char cols[16];
	w = Width();
	h = Height();
	memset(CachePtr,0,sizeof(CachePtr));
	for(i=0; i < 16; i++)
	{
		cols[i]=ClosestColor(dib.m_pRGB+i);
	}
	for(i=0; i < h; i++)
	{
		dPtr = GetLinePtr(i);
		sPtr = dib.GetLinePtr(i);
		for(j=0 ; j < w; j++,dPtr++)
		{
			if(!(j&1)) n = (*sPtr & 0xf0)>>4;
			else 
			{
				n = *sPtr & 0x0f;
				sPtr++;
			}
			*dPtr = cols[n];
		}
	}
	return TRUE;
}

BOOL CDIB::SwitchPalette(CDIB& dib)
{
int i,j,w,h;
unsigned char *sPtr,*dPtr;
unsigned char cols[256];
	w = Width();
	h = Height();
	memset(CachePtr,0,sizeof(CachePtr));
	for(i=0; i < 256; i++)
	{
		cols[i]=ClosestColor(dib.m_pRGB+i);
	}
	for(i=0; i < h; i++)
	{
		dPtr = GetLinePtr(i);
		sPtr = dib.GetLinePtr(i);
		for(j=0 ; j < w; j++,sPtr++,dPtr++)
		{
			*dPtr = cols[*sPtr];
		}
	}
	return TRUE;
}


int CDIB::ClosestColor(RGBQUAD *pRgb)
{
unsigned int dist=BIG_DISTANCE,i,d,c;
RGBQUAD *pQuad=m_pRGB;
int pSize=GetPaletteSize();
	for(i=0; i < pSize;i++)
	{
		if(CachePtr[i])
		{
			if(!memcmp((void *)&CacheQuad[i],(void *)pRgb,3)) 
			{
				return i;
			}
		}
	}
	for(i=0; i < pSize; i++,pQuad++)
	{
		d = Distance(*pRgb,*pQuad);
		if(!d) 
		{
			CacheQuad[i]=*pRgb;
			CachePtr[i]=1;
			return i;
		}		
		if(dist > d) 
		{
			c = i;
			dist = d;
		}
	}
	CacheQuad[c]=*pRgb;
	CachePtr[c]=1;
	return c;
}

unsigned int CDIB::Distance(RGBQUAD& rgb1,RGBQUAD& rgb2)
{
unsigned int d;
	d =  3*(unsigned)((rgb1.rgbRed)-(rgb2.rgbRed))*(unsigned)((rgb1.rgbRed)-(rgb2.rgbRed));
	d += 4*(unsigned)((rgb1.rgbGreen)-(rgb2.rgbGreen))*(unsigned)((rgb1.rgbGreen)-(rgb2.rgbGreen)) ;
	d += 2*(unsigned)((rgb1.rgbBlue)-(rgb2.rgbBlue))*(unsigned)((rgb1.rgbBlue)-(rgb2.rgbBlue));
	return d;
}

BOOL CDIB::OpenDIB(CString& csFileName)
{
CFile file;
	if(!file.Open(csFileName,CFile::modeRead | CFile::typeBinary))
	{
		return FALSE;
	}
	file.Close();
	if(OpenBMP(csFileName)) return TRUE;
	return FALSE;
}



BOOL CDIB::SaveDIB(CString& csFileName,BitmapType type)
{
CFile file;
	if(!file.Open(csFileName,CFile::modeCreate | CFile::typeBinary))
	{
		return FALSE;
	}
	file.Close();
	switch(type)
	{
	case BMP:
			return SaveBMP(csFileName);
	default:
			return FALSE;
	}
	return FALSE;
}

BOOL CDIB::SaveBMP(CString& csFileName)
{
BITMAPFILEHEADER bFile;
CFile file;
	if(!file.Open(csFileName,CFile::modeWrite | CFile::typeBinary))
	{
		return FALSE;
	}
	::ZeroMemory(&bFile,sizeof(bFile));
	memcpy((void *)&bFile.bfType,"BM",2);
	bFile.bfSize = GetDIBSize() + sizeof(bFile);
	bFile.bfOffBits = sizeof(BITMAPINFOHEADER) + GetPaletteSize()*sizeof(RGBQUAD) + sizeof(BITMAPFILEHEADER);
	file.Write(&bFile,sizeof(bFile));
	file.Write(m_pVoid,GetDIBSize());
	file.Close();
	return TRUE;

}

BOOL CDIB::OpenBMP(CString& csFileName)
{
BITMAPFILEHEADER bFile;
BITMAPINFOHEADER head;
CFile file;
	if(!file.Open(csFileName,CFile::modeRead | CFile::typeBinary))
	{
		return FALSE;
	}
	file.Read(&bFile,sizeof(bFile));
	if(memcmp((void *)&bFile.bfType,"BM",2))
	{
		file.Close();
		return FALSE;
	}
	file.Read(&head,sizeof(head));
	if(!Create(head))
	{
		file.Close();
		return FALSE;
	}
	file.Read(m_pRGB,sizeof(RGBQUAD)*GetPaletteSize());
	file.Seek(bFile.bfOffBits,CFile::begin);
	file.Read(m_pBits,height*bytes);
	file.Close();
	return TRUE;

}


int CDIB::CountColors()
{
	ASSERT(GetBitCount()==8);
BYTE colors[256],*ptr;
int nNum=0,i,j,w,d;
	w = Width();
	d = Height();
	memset(colors,0,256);
	for(i=0; i < d; i++)
	{
		ptr = GetLinePtr(i);
		for(j=0; j < w; j++,ptr++)
		{
			if(!colors[*ptr])
			{
				colors[*ptr]=1;
				nNum++;
			}
		}
	}
	return nNum;
}

int CDIB::EnumColors(BYTE *array)
{
	ASSERT(GetBitCount()==8);
BYTE *ptr;
int nNum=0,i,j,w,d;
	w = Width();
	d = Height();
	memset(array,0,256);
	for(i=0; i < d; i++)
	{
		ptr = GetLinePtr(i);
		for(j=0; j < w; j++,ptr++)
		{
			if(!array[*ptr])
			{
				array[*ptr]=1;
				nNum++;
			}
		}
	}
	return nNum;
}

COLORREF CDIB::PaletteColor(int nIndex)
{
	ASSERT(nIndex < 256);
RGBQUAD *pRGB= m_pRGB+nIndex;
	return RGB(pRGB->rgbRed,pRGB->rgbGreen,pRGB->rgbBlue);
}

BOOL CDIB::SwitchFrom24(CDIB& dib)
{
int i,j,w,h,c;
unsigned char *sPtr,*dPtr;
BYTE *index_ptr=NULL;
RGBQUAD rgb;
	w = Width();
	h = Height();
	index_ptr = (BYTE *)malloc(0x7FFF+1);
	if(!index_ptr) return FALSE;
	memset(CachePtr,0,sizeof(CachePtr));
	for(i=0; i <= 0x7FFF; i++)
	{
		rgb.rgbRed = (((i & 0x7C00)>>10) << 3) | 0x07;
		rgb.rgbGreen = (((i & 0x3e0)>>5) << 3) | 0x07;
		rgb.rgbBlue = ((i & 0x1F)<<3) | 0x07;
		index_ptr[i] = ClosestColor(&rgb);
	}
	for(i=0; i < h; i++)
	{
		dPtr = GetLinePtr(i);
		sPtr = dib.GetLinePtr(i);
		for(j=0 ; j < w; j++,dPtr++,sPtr+=3)
		{
			c = (*sPtr >> 3) | ((*(sPtr+1) >> 3) << 5) | ((*(sPtr+2) >> 3) << 10);
			*dPtr = index_ptr[c];
		}
	}
	free(index_ptr);
	return TRUE;
}

?? 快捷鍵說(shuō)明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
成人激情综合网站| 狠狠色丁香久久婷婷综合丁香| 欧美影院午夜播放| 国产在线播放一区二区三区| 亚洲狠狠爱一区二区三区| 精品免费视频一区二区| 欧美日韩视频在线一区二区| 国产成人免费视频网站| 精品无人码麻豆乱码1区2区| 洋洋av久久久久久久一区| 国产日韩成人精品| 91精品国产日韩91久久久久久| 久久精品国产**网站演员| 亚洲精品视频在线| 日本一区二区三区四区在线视频| 欧美日韩国产首页| 色综合一区二区三区| 成人免费看黄yyy456| 国产精品自在欧美一区| 美脚の诱脚舐め脚责91 | 国产婷婷色一区二区三区| 欧美狂野另类xxxxoooo| 在线精品视频免费播放| 欧美婷婷六月丁香综合色| 欧美亚洲自拍偷拍| 在线观看视频91| 欧美电影在哪看比较好| 91精品国产色综合久久ai换脸| 麻豆精品国产传媒mv男同| 亚洲电影中文字幕在线观看| 亚洲一区中文日韩| 亚洲777理论| 韩国毛片一区二区三区| 国产成人99久久亚洲综合精品| 国产不卡视频在线播放| 99国产精品99久久久久久| 91免费版pro下载短视频| 欧美制服丝袜第一页| 日韩女优av电影| 国产精品国产a| 亚洲精品国产a久久久久久 | 激情欧美一区二区三区在线观看| 国产一区二区在线免费观看| 成人18精品视频| 欧美三级中文字幕在线观看| 欧美精品一区二区高清在线观看| 欧美国产在线观看| 亚洲乱码一区二区三区在线观看| 自拍偷自拍亚洲精品播放| 免费看精品久久片| 99精品欧美一区二区三区小说| 9191成人精品久久| 国产精品三级av| 日韩高清一级片| 色综合天天在线| 中文天堂在线一区| 日韩黄色免费电影| 丁香五精品蜜臀久久久久99网站 | 免费av网站大全久久| 不卡av电影在线播放| 久久综合九色综合欧美亚洲| 亚洲亚洲人成综合网络| aaa亚洲精品| 中文在线资源观看网站视频免费不卡| 婷婷成人激情在线网| 在线观看亚洲成人| 亚洲免费在线播放| 免费成人性网站| 欧美日韩免费在线视频| 亚洲美女屁股眼交3| 色综合天天视频在线观看| 欧美国产精品一区| 从欧美一区二区三区| 久久久亚洲精品一区二区三区| 精品在线一区二区| 欧美va日韩va| 国产伦精品一区二区三区免费 | 成人精品电影在线观看| 国产女主播在线一区二区| 成人性生交大合| 亚洲人精品午夜| 欧美精品黑人性xxxx| 蜜桃一区二区三区四区| 国产亚洲综合av| 91国产免费看| 日韩中文字幕亚洲一区二区va在线| 欧美高清hd18日本| 国内外成人在线视频| 日韩午夜在线观看视频| 精品中文字幕一区二区小辣椒| 国产午夜亚洲精品不卡| 成人国产精品视频| 亚洲中国最大av网站| 欧美一三区三区四区免费在线看| 久久精品国产第一区二区三区| 久久久精品tv| 欧美性猛交xxxx黑人交| 久久99国产精品久久99| 尤物在线观看一区| 2020国产精品| 在线免费av一区| 国产乱妇无码大片在线观看| 一区二区三区四区亚洲| 精品国内片67194| 91福利国产精品| 国产成人免费视频精品含羞草妖精| 夜夜嗨av一区二区三区四季av| 久久久久九九视频| 欧美日韩国产一级二级| 日本韩国欧美一区二区三区| 国产一区二区三区免费| 亚洲欧洲性图库| 精品久久久久久无| 欧美日韩高清一区| 在线观看亚洲专区| 91亚洲精品乱码久久久久久蜜桃| 国内精品写真在线观看| 蜜臀va亚洲va欧美va天堂| 午夜国产精品影院在线观看| 亚洲欧美精品午睡沙发| 中文字幕一区二| 国产精品视频免费| 久久日韩粉嫩一区二区三区| 久久天天做天天爱综合色| 日韩欧美中文字幕公布| 欧美一区二区三区喷汁尤物| 欧美视频一区二区三区| 欧美日韩成人在线| 欧美一区二区三区四区在线观看| 欧美区视频在线观看| 欧美久久久久久久久久| 欧美三级电影在线观看| 欧美色精品天天在线观看视频| 欧美三级日本三级少妇99| 69堂成人精品免费视频| 欧美一区中文字幕| 777xxx欧美| 久久夜色精品国产噜噜av| 国产网站一区二区| 一区二区不卡在线视频 午夜欧美不卡在| 亚洲日本青草视频在线怡红院| 亚洲一级不卡视频| 日韩高清欧美激情| 成人综合日日夜夜| 欧美日韩一卡二卡| 久久久精品影视| 亚洲在线成人精品| 国产一区二区不卡在线| 色婷婷精品久久二区二区蜜臀av| 欧美高清视频在线高清观看mv色露露十八 | 亚洲国产精品高清| 亚洲电影视频在线| 黄页网站大全一区二区| 91美女视频网站| 久久精品视频一区二区三区| 偷拍一区二区三区| 蜜臀久久久久久久| 成人晚上爱看视频| 欧美一区二区二区| 一区二区三区欧美| 国产91在线观看丝袜| 欧美一级日韩一级| 亚洲一区二区四区蜜桃| 91性感美女视频| 国产日韩v精品一区二区| 精品无码三级在线观看视频| 91精品久久久久久久99蜜桃| 亚洲欧美国产77777| 99在线精品观看| 日本一区二区电影| 国产在线精品一区二区夜色| 欧美无乱码久久久免费午夜一区| 国产精品免费视频网站| 国产成人精品网址| 精品国产免费人成在线观看| 美腿丝袜亚洲一区| 日韩你懂的在线播放| 美女视频黄a大片欧美| 91精品国产综合久久精品| 婷婷成人综合网| 日韩视频在线你懂得| 老司机精品视频在线| 久久麻豆一区二区| 国产福利视频一区二区三区| 亚洲综合成人在线| 美女诱惑一区二区| 欧美一级xxx| 老鸭窝一区二区久久精品| 国产三级精品三级在线专区| 国产一区二区三区在线看麻豆| 久久久久久电影| 91在线porny国产在线看| 亚洲精品综合在线| 91麻豆精品国产自产在线观看一区| 日韩av一区二| 亚洲国产成人午夜在线一区| 欧美综合亚洲图片综合区| 天堂一区二区在线| 欧美激情一区二区三区蜜桃视频| 99re视频这里只有精品|