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

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

?? dib.cpp

?? 本程序根據(jù)用戶不同的需求設(shè)計(jì)窗口的背景
?? CPP
?? 第 1 頁(yè) / 共 2 頁(yè)
字號(hào):
#include "stdafx.h"
#include "math.h"
#include "DIB.h"

#define BIG_DISTANCE 10000000L

#define DIST(r1,g1,b1,r2,g2,b2) \
	    (long) (3L*(long)((r1)-(r2))*(long)((r1)-(r2)) + \
		    4L*(long)((g1)-(g2))*(long)((g1)-(g2)) + \
		    2L*(long)((b1)-(b2))*(long)((b1)-(b2)))


static unsigned char masktable[] = { 0x80,0x40,0x20,0x10,0x08,0x04,0x02,0x01 };



CDIB::CDIB(HANDLE hDib,int nBits)
{
	m_pVoid = NULL;
	m_pLinePtr = NULL;
	m_bUseGamma=FALSE;
	width=height=0;
	if(hDib)
	{
		CreateFromHandle(hDib,nBits);
	}
}

CDIB::~CDIB()
{
	DestroyDIB();
}

void CDIB::DestroyDIB()
{
	if(m_pVoid) free(m_pVoid);
	m_pVoid = NULL;
	if(m_pLinePtr) free(m_pLinePtr);
	m_pLinePtr = NULL;
}


BOOL CDIB::Create(int width,int height,int bits)
{
	/*
		Free existing image
	*/
	DestroyDIB();
//	ASSERT(bits == 24 || bits == 8);

BITMAPINFOHEADER bmInfo;
	
	memset(&bmInfo,0,sizeof(BITMAPINFOHEADER));
	bmInfo.biSize = sizeof(BITMAPINFOHEADER);
	bmInfo.biWidth = width;
	bmInfo.biHeight = height;
	bmInfo.biPlanes = 1;
	bmInfo.biBitCount = bits;
	bmInfo.biCompression = BI_RGB;
	return Create(bmInfo);
}

BOOL CDIB::Create(BITMAPINFOHEADER& bmInfo)
{
	bytes = (bmInfo.biBitCount*bmInfo.biWidth)>>3;
	height = bmInfo.biHeight;
	width = bmInfo.biWidth;
//	bmInfo.biHeight *= -1;
	while(bytes%4) bytes++;

	int size;
	size = sizeof(BITMAPINFOHEADER) + sizeof(RGBQUAD)*GetPaletteSize(bmInfo) + bytes*height;
	m_pVoid = (void *)malloc(size);
	if(!m_pVoid) return FALSE;

	m_pInfo = (PBITMAPINFO )m_pVoid;
	memcpy((void *)&m_pInfo->bmiHeader,(void *)&bmInfo,sizeof(BITMAPINFOHEADER));
	m_pRGB = (RGBQUAD *)((unsigned char *)m_pVoid + sizeof(BITMAPINFOHEADER)) ;
	m_pBits = (unsigned char *)(m_pVoid) + sizeof(BITMAPINFOHEADER) + sizeof(RGBQUAD)*GetPaletteSize();

int i;
BYTE **ptr;
	m_pLinePtr = (BYTE **)malloc(sizeof(BYTE *)*height);
	if(!m_pLinePtr) return FALSE;
	for(i=0,ptr=m_pLinePtr; i < height; i++,ptr++)
	{
		//*ptr = (int)(m_pBits)+(i*bytes);
		//*ptr = (int)GetLinePtr(i);
		*ptr = m_pBits + (height-i-1)*bytes;
	}
	m_nFlags = 0;
	return TRUE;
}

void CDIB::SetPalette(unsigned char *palette)
{
int i,size;
RGBQUAD *rgb;
	if(!palette) return;
	size = GetPaletteSize();
	for(i=0,rgb = m_pRGB; i < size; i++,rgb++,palette+=3)
	{
		if(m_bUseGamma)
		{
			rgb->rgbRed = Gamma[palette[0]];
			rgb->rgbGreen = Gamma[palette[1]];
			rgb->rgbBlue = Gamma[palette[2]];
		}
		else
		{
			rgb->rgbRed = palette[0];
			rgb->rgbGreen = palette[1];
			rgb->rgbBlue = palette[2];
		}
		rgb->rgbReserved = (BYTE)0;
	}
}

void CDIB::SetPalette(RGBQUAD *pRGB)
{
int size;
	if(!pRGB) return;
	size = GetPaletteSize();
	memcpy(m_pRGB,pRGB,size*sizeof(RGBQUAD));
}


int CDIB::GetPaletteSize()
{
	return GetPaletteSize(m_pInfo->bmiHeader);
}


int CDIB::GetPaletteSize(BITMAPINFOHEADER& bmInfo)
{
	switch(bmInfo.biBitCount)
	{
	case 1:
			return 2;
	case 4:
			return 16;
	case 8:
			return 256;
	default:
			return 0;
	}
}


void CDIB::SetPixel(int x,int y,COLORREF color)
{
unsigned char *ptr;
	ASSERT(x >= 0 && y >=0);
	ASSERT(x < width && y < height);

//	ptr = m_pBits + (y*bytes) + x * 3;
	ptr = (unsigned char *)m_pLinePtr[y];
	ptr += x*3;
	*ptr++ = (unsigned char)GetBValue(color);
	*ptr++ = (unsigned char)GetGValue(color);
	*ptr++ = (unsigned char)GetRValue(color);
}

void CDIB::SetPixel8(int x,int y,unsigned char color)
{
unsigned char *ptr,*aptr;
	ASSERT(x >= 0 && y >=0);
	ASSERT(x < width && y < height);

//	ptr = m_pBits + (y*bytes) + x ;
//	ptr = (unsigned char *)m_pLinePtr[y] ;
	ptr = GetLinePtr(y);
	aptr = ptr;
	ptr += x;
	*ptr = color;
}


COLORREF CDIB::GetPixel(int x,int y)
{
unsigned char *ptr;
COLORREF color;
	ASSERT(x >= 0 && y >=0);
	ASSERT(x < width && y < height);

//	ptr = m_pBits + (y*bytes) + x * 3;
	ptr = GetLinePtr(y);
	ptr += (x*3);
	color = RGB(*(ptr+2),*(ptr+1),*ptr);
	return color;
}

CBitmap *CDIB::GetTempBitmap(CDC& dc)
{
HBITMAP hBitmap;
CBitmap *temp;
	ASSERT(m_pVoid != NULL);
	hBitmap = CreateDIBitmap(dc.m_hDC,
				(PBITMAPINFOHEADER)m_pInfo,
				CBM_INIT,
				(const void *)m_pBits,
				m_pInfo,
				DIB_RGB_COLORS);

	if(hBitmap == NULL) return NULL;
	temp = CBitmap::FromHandle(hBitmap);
	return temp;
}

CBitmap *CDIB::GetBitmap(CDC& dc)
{
HBITMAP hBitmap;
CBitmap *temp;
	ASSERT(m_pVoid != NULL);
	hBitmap = CreateDIBitmap(dc.m_hDC,
				(PBITMAPINFOHEADER)m_pInfo,
				CBM_INIT,
				(const void *)m_pBits,
				m_pInfo,
				DIB_RGB_COLORS);

	if(hBitmap == NULL) return NULL;
	temp = CBitmap::FromHandle(hBitmap);
	if(temp)
	{
		BITMAP bmp;
		LPVOID lpVoid;
		temp->GetBitmap(&bmp);
		lpVoid = malloc(bmp.bmWidthBytes*bmp.bmHeight);
		if(!lpVoid) return NULL;
		temp->GetBitmapBits(bmp.bmWidthBytes*bmp.bmHeight,lpVoid);
		CBitmap *newBmp = new CBitmap;
		newBmp->CreateBitmapIndirect(&bmp);
		newBmp->SetBitmapBits(bmp.bmWidthBytes*bmp.bmHeight,lpVoid);
		free(lpVoid);
		return newBmp;
	}
	else return NULL;

}

void CDIB::CopyLine(int source,int dest)
{
unsigned char *src,*dst;
	ASSERT(source <= height && source >= 0);
	ASSERT(dest <= height && dest >= 0);
	if(source == dest) return;
	src = GetLinePtr(source);
	dst = GetLinePtr(dest);
	memcpy(dst,src,bytes);
}

void CDIB::InitDIB(COLORREF color)
{
int i,j;
unsigned char *ptr;
	
	if(m_pInfo->bmiHeader.biBitCount == 24)
	{
		unsigned char col[3];
		col[0]=GetBValue(color);
		col[1]=GetGValue(color);
		col[2]=GetRValue(color);
		for(i=0,ptr = m_pBits; i < height; i++)
		{
			ptr = m_pBits + i*bytes;
			for(j=0; j < width ; j++,ptr+=3)
			{
				memcpy(ptr,col,3);
			}
		}
	}
	else
	{
		for(i=0,ptr = m_pBits; i < height; i++,ptr+=bytes)
		{
			memset(ptr,(BYTE)color,bytes);
		}
	}
}


void CDIB::BitBlt(HDC hDest,int nXDest,int nYDest,int nWidth,int nHeight,int xSrc,int ySrc)
{
	SetDIBitsToDevice(hDest,nXDest,nYDest,nWidth,nHeight,xSrc,Height()-ySrc-nHeight,0,Height(),m_pBits,m_pInfo,DIB_RGB_COLORS);
}

void CDIB::StretchBlt(HDC hDest,int nXDest,int nYDest,int nDWidth,int nDHeight,int xSrc,int ySrc,int  nSWidth,int nSHeight)
{
	int err;
	err = StretchDIBits(hDest,nXDest,nYDest,nDWidth,nDHeight,xSrc,ySrc,nSWidth,nSHeight,m_pBits,(CONST BITMAPINFO * )&m_pInfo->bmiHeader,DIB_RGB_COLORS,SRCCOPY);
}

void CDIB::ExpandBlt(int nXDest,int nYDest,int xRatio,int yRatio,CDIB& dibSrc,int xSrc,int ySrc,int  nSWidth,int nSHeight)
{
	SetPalette(dibSrc.m_pRGB);

	nSWidth = xSrc+nSWidth > dibSrc.width ? dibSrc.width-xSrc : nSWidth;
	nSHeight = ySrc+nSHeight > dibSrc.height? dibSrc.height-ySrc : nSHeight;

	Expand(nXDest,nYDest,xRatio,yRatio,dibSrc,xSrc,ySrc,nSWidth,nSHeight);
}

void CDIB::Expand(int nXDest,int nYDest,int xRatio,int yRatio,CDIB& dibSrc,int xSrc,int ySrc,int  nSWidth,int nSHeight)
{
int xNum,yNum,xErr,yErr;	
int nDWidth,nDHeight;
	
	nDWidth = nSWidth*xRatio;
	nDHeight = nSHeight*yRatio;

	nDWidth = nXDest+nDWidth > width ? width-nXDest : nDWidth ; 
	nDHeight = nYDest+nDHeight > height ? height-nYDest : nDHeight;

	xNum = nDWidth/xRatio;
	yNum = nDHeight/yRatio;
	xErr = nDWidth%xRatio;
	yErr = nDHeight%yRatio;

unsigned char *buffer,*srcPtr,*destPtr,*ptr;
int i,j,k;
	
	buffer = (unsigned char *)malloc(nDWidth+20);
	if(!buffer) return;

	for(i=0; i < yNum; i++,ySrc++)
	{
		srcPtr = dibSrc.GetLinePtr(ySrc) + xSrc;
		ptr = buffer;
		for(j=0; j < xNum; j++,ptr+=xRatio)
		{
			memset(ptr,*(srcPtr+j),xRatio);
			k=*(srcPtr+j);
		}
		memset(ptr,(unsigned char)k,xErr);
		for(j=0; j < yRatio ; j++,nYDest++)
		{
			destPtr = GetLinePtr(nYDest) + nXDest;
			memcpy(destPtr,buffer,nDWidth);		
		}
	}
	for(j=0; j < yErr; j++,nYDest++)
	{
		destPtr = GetLinePtr(nYDest) + nXDest;
		memcpy(destPtr,buffer,nDWidth);		
	}
	free(buffer);
}

void CDIB::StretchBlt(int nXDest,int nYDest,int nDWidth,int nDHeight,CDIB& dibSrc,int xSrc,int ySrc,int  nSWidth,int nSHeight)
{
	SetPalette(dibSrc.m_pRGB);
	nDWidth = nXDest+nDWidth > width ? width-nXDest : nDWidth ; 
	nDHeight = nYDest+nDHeight > height ? height-nYDest : nDHeight;

	nSWidth = xSrc+nSWidth > dibSrc.width ? dibSrc.width-xSrc : nSWidth;
	nSHeight = ySrc+nSHeight > dibSrc.height? dibSrc.height-ySrc : nSHeight;

int xDiv,yDiv;
int xMod,yMod;

	xDiv = nDWidth/nSWidth;
	xMod = nDWidth%nSWidth;

	yDiv = nDHeight/nSHeight;
	yMod = nDHeight%nSHeight;

	if(!xMod && !yMod && xDiv > 0 && yDiv > 0)
	{
		ExpandBlt(nXDest,nYDest,xDiv,yDiv,dibSrc,xSrc,ySrc,nSWidth,nSHeight);
		return;
	}

unsigned char *tempPtr,*srcPix,*destPix,*q;
	tempPtr = (unsigned char *)malloc(nDWidth+20);
int i,j,k,l,x,y,m;
int xErr,yErr;
	for(i=yErr=m=0; i < nSHeight; i++)
	{
		srcPix = dibSrc.GetLinePtr(i+ySrc) + xSrc;
		q = tempPtr;
		for(j=l=xErr=0; j < nSWidth; j++,srcPix++)
		{
			k = xDiv;
			xErr += xMod;
			if(xErr >= nSWidth)
			{
				k++;
				xErr%=nSWidth;
			}
			x=0;
			while(l < nDWidth &&  x < k)
			{
				*q++ = *srcPix;
				l++;
				x++;
			}
		}
		while(l < nDWidth)
		{
			*q++=*srcPix;
			l++;
		}
		k= yDiv;
		yErr += yMod;
		if(yErr >= nSHeight)
		{
			k++;
			yErr%=nSHeight;
		}
		y=0;
		while(m < nDHeight && y < k)
		{
			destPix = GetLinePtr(m+nYDest) + nXDest;
			memcpy(destPix,tempPtr,nDWidth);
			m++;
			y++;
		}
	}
	while(m < nDHeight )
	{
		destPix = GetLinePtr(m+nYDest) + nXDest;
		memcpy(destPix,tempPtr,nDWidth);
		m++;
	}
	free(tempPtr);
}

void CDIB::BitBlt(int nXDest,int nYDest,int nWidth,int nHeight,CDIB& dibSrc,int nSrcX,int nSrcY,BYTE *colors)
{
	SetPalette(dibSrc.m_pRGB);
	if(nXDest < 0)
	{
		nSrcX -= nXDest;
		nWidth += nXDest;
		nXDest=0;
	}
	if(nYDest < 0)
	{
		nSrcY -= nYDest;
		nHeight += nYDest;
		nYDest=0;
	}
	if(nSrcX < 0)
	{
		nXDest -= nSrcX;
		nWidth += nSrcX;
		nSrcX=0;
	}
	if(nSrcY < 0)
	{
		nYDest -= nSrcY;
		nHeight += nSrcY;
		nSrcY=0;
	}
	nWidth = nXDest+nWidth > width ? width-nXDest : nWidth ; 
	nHeight = nYDest+nHeight > height ? height-nYDest : nHeight;

	nWidth = nSrcX+nWidth > dibSrc.width ? dibSrc.width-nSrcX : nWidth;
	nHeight = nSrcY+nHeight > dibSrc.height? dibSrc.height-nSrcY : nHeight;

	nWidth = __max(0,nWidth);
	nHeight = __max(0,nHeight);
int i,k,l,j;
unsigned char *srcPtr,*destPtr;
	if(!colors)
	{
		for(i=0,k=nSrcY,l=nYDest; i < nHeight; i++,k++,l++)
		{
			if(k < 0 || l < 0)
			{
				continue;
			}
			else
			{
				srcPtr = dibSrc.GetLinePtr(k);
				destPtr = GetLinePtr(l);
				memcpy(destPtr+nXDest,srcPtr+nSrcX,nWidth);
			}
		}
	}
	else
	{
		for(i=0,k=nSrcY,l=nYDest; i < nHeight; i++,k++,l++)
		{
			if(k < 0 || l < 0)
			{
				continue;
			}
			else
			{
				srcPtr = dibSrc.GetLinePtr(k)+nXDest;
				destPtr = GetLinePtr(l)+nSrcX;

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲成a人在线观看| 精品在线播放免费| 97久久精品人人澡人人爽| 久久你懂得1024| 激情小说亚洲一区| 欧美大胆一级视频| 午夜欧美电影在线观看| 在线观看www91| 亚洲主播在线播放| 欧美午夜精品久久久久久孕妇| 亚洲自拍偷拍麻豆| 欧美日韩综合在线| 欧美日韩一区三区| 亚洲欧洲中文日韩久久av乱码| fc2成人免费人成在线观看播放| 国产精品国产a级| www.av精品| 亚洲美女淫视频| 欧美午夜精品一区二区蜜桃| 日日夜夜精品视频免费| 91精选在线观看| 美女视频网站久久| 久久久久九九视频| 成人午夜看片网址| 国产精品国产三级国产有无不卡| 91天堂素人约啪| 亚洲一区二区三区四区五区黄| 欧美久久一二三四区| 免费人成网站在线观看欧美高清| 日韩三级.com| 国产成人午夜片在线观看高清观看| 欧美国产精品专区| 94-欧美-setu| 午夜精品久久一牛影视| 日韩欧美在线一区二区三区| 国产乱色国产精品免费视频| 中文字幕视频一区二区三区久| 色婷婷激情综合| 日本欧美在线看| 久久久久久麻豆| 91色在线porny| 午夜影院久久久| 精品动漫一区二区三区在线观看| 一区二区三区四区不卡视频| 欧美日韩午夜影院| 极品少妇xxxx精品少妇偷拍| 国产精品午夜在线观看| 欧洲精品一区二区三区在线观看| 日韩电影在线一区二区| 国产亚洲欧洲997久久综合 | 国产精品第一页第二页第三页| 91视频观看免费| 奇米一区二区三区av| 欧美国产乱子伦| 欧美三级欧美一级| 韩国av一区二区三区在线观看| 国产精品久久国产精麻豆99网站 | 欧美亚洲自拍偷拍| 麻豆91精品91久久久的内涵| 国产精品污网站| 欧美日韩三级一区| 国产精品夜夜爽| 亚洲一区在线观看视频| 欧美精品一区视频| 欧美亚洲尤物久久| 国产不卡视频在线观看| 亚洲国产aⅴ成人精品无吗| 国产亚洲一区二区三区四区| 欧美视频日韩视频在线观看| 国产精品自在欧美一区| 亚洲主播在线播放| 国产亚洲精久久久久久| 欧美日韩久久不卡| 波多野结衣91| 麻豆视频观看网址久久| 亚洲啪啪综合av一区二区三区| 精品国免费一区二区三区| 日本国产一区二区| 国产在线视视频有精品| 亚洲国产视频一区| 国产欧美精品一区二区色综合朱莉| 欧美日韩亚洲综合在线 欧美亚洲特黄一级| 国产在线精品视频| 丝瓜av网站精品一区二区| 中文字幕亚洲综合久久菠萝蜜| 精品少妇一区二区三区日产乱码 | 高清成人免费视频| 亚洲成人一区二区在线观看| 中文成人av在线| 日韩亚洲欧美成人一区| 色悠久久久久综合欧美99| 精品一区二区免费在线观看| 亚洲图片有声小说| 欧美国产乱子伦| 精品久久久三级丝袜| 欧美日韩一区高清| 色香色香欲天天天影视综合网| 国产一区二区福利视频| 麻豆成人免费电影| 亚洲成av人综合在线观看| 亚洲国产精品精华液ab| 精品少妇一区二区三区视频免付费| 欧美日韩成人综合| 色狠狠av一区二区三区| 成人久久视频在线观看| 国产一区二区免费在线| 麻豆免费精品视频| 日韩电影免费在线观看网站| 亚洲高清免费观看| 亚洲女同一区二区| 亚洲欧洲精品一区二区三区不卡| 国产清纯白嫩初高生在线观看91| 精品乱码亚洲一区二区不卡| 欧美一区二区私人影院日本| 欧美日韩亚洲高清一区二区| 欧洲精品中文字幕| 色激情天天射综合网| 色综合久久久久综合99| 不卡的av网站| 成人免费观看视频| 国产一区二三区好的| 午夜影院久久久| 亚洲成年人网站在线观看| 亚洲夂夂婷婷色拍ww47 | 国产午夜精品一区二区| 精品国产sm最大网站免费看| 日韩午夜电影在线观看| 日韩欧美视频在线| 日韩亚洲欧美中文三级| 日韩一区二区免费电影| 日韩精品专区在线影院观看| 欧美第一区第二区| 精品国产乱子伦一区| 欧美精品一区二| 久久综合给合久久狠狠狠97色69| 精品国产乱码久久久久久免费 | 国产精品久久久久久久久久久免费看 | 国产精品一区二区91| 国产精品综合一区二区三区| 国产精品一区二区久久不卡| 成人一区在线观看| jiyouzz国产精品久久| 99精品久久99久久久久| 91国产视频在线观看| 欧美三级电影网站| 91精品免费在线观看| 欧美一级日韩免费不卡| 精品国产乱码久久久久久蜜臀| 精品av久久707| 国产婷婷色一区二区三区在线| 国产精品欧美极品| 亚洲男人的天堂一区二区| 亚洲综合视频在线观看| 日本女人一区二区三区| 欧美丝袜丝交足nylons| 成人一区二区三区视频| 成人动漫在线一区| 色婷婷综合久久久中文字幕| 欧美在线啊v一区| 91精品国产综合久久婷婷香蕉| 日韩欧美国产综合| 国产视频视频一区| 亚洲女同女同女同女同女同69| 亚洲h在线观看| 极品少妇一区二区三区精品视频| 懂色av一区二区三区蜜臀 | 国产在线国偷精品免费看| 大桥未久av一区二区三区中文| 99精品久久久久久| 7777精品伊人久久久大香线蕉 | 欧美日本在线播放| 337p日本欧洲亚洲大胆色噜噜| 亚洲欧洲99久久| 视频一区二区欧美| 国产乱对白刺激视频不卡| 91视频在线看| 日韩欧美第一区| 国产精品久久久久久亚洲毛片| 午夜精品一区二区三区免费视频 | 日本一二三不卡| 亚洲成人av一区二区三区| 精品一区二区三区av| 91天堂素人约啪| 欧美mv日韩mv亚洲| 亚洲精品久久久蜜桃| 韩国成人在线视频| 色悠悠久久综合| 久久综合久久99| 久久精品国产一区二区| 国产三级久久久| 亚洲精品成人在线| 麻豆91在线观看| 一本久久精品一区二区| 日韩精品中文字幕一区| 亚洲色大成网站www久久九九| 蜜桃久久久久久| 一本色道久久综合亚洲aⅴ蜜桃| 欧美一卡二卡在线| 亚洲婷婷在线视频| 韩国女主播一区|