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

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

?? cpixeldepthchanger.cpp

?? 三星ARM9芯片s3c2410的wince 4.2BSP源代碼
?? CPP
字號:

// ARM Ltd
// Copyright 1998 All Rights reserved

// David Earlam 22.9.1998
// helper class to change the color-depth (bits per pixel) of uncompresed bitmap image bits while keeping
// the original width and height

// assumes that the first (leftmost) pixel in a row is encoded in the <srcBpp> most significant
// bits of a byte  

// limitations: currently can only keep or increase effective color depth 1:1, 1:2, 1:4, not reduce it

#include <afxwin.h>
#include "CPixelDepthChanger.h"

// DR DEBUG
#define LEFT_TO_RIGHT

#define BOTTOM_TO_TOP

IMPLEMENT_SERIAL(CPixelDepthChanger, CObject, 0);

CPixelDepthChanger::CPixelDepthChanger()
{
m_pdstBits = NULL;
m_psrcBits = NULL;
m_srcSize = NULL;
m_lookup = NULL;
m_bDelete_pdstBits=FALSE;
}

CPixelDepthChanger::CPixelDepthChanger( int srcWidth, int srcHeight, int srcBpp, void *psrcBits, CDib& rDstCDib  )
{	
	m_psrcBits = (LPBYTE)psrcBits;

	m_srcSize = VolumeFromWidthHeightDepth(srcWidth, srcHeight, srcBpp);
	
	//m_pshadowsrcBits = new BYTE[m_srcSize];
//	memcpy (m_pshadowsrcBits, m_psrcBits, m_srcSize); //make a copy of the source to detect what has changed since last update

	m_bDelete_pdstBits=FALSE;

	DWORD dstSize;
	if ((dstSize = rDstCDib.GetSizeImage() )!=0)
	{
		if (rDstCDib.m_lpImage == NULL)
		{ 
			rDstCDib.m_lpImage = new BYTE[dstSize];
			
			m_bDelete_pdstBits=TRUE;
		}
		m_pdstBits = (LPBYTE) rDstCDib.m_lpImage;
	}

    CreateLookupTable(srcBpp, rDstCDib.m_lpBMIH->biBitCount);
}

void CPixelDepthChanger::CreateLookupTable(int srcBpp, int dstBpp)
{
	int nLookupTableEntries  =  256; // 2^ bits in a byte, we'll lookup by byte

	m_magnification = dstBpp / srcBpp;

	switch (m_magnification)
	{
	case 1: case 2: case 4: break;
			default:	
			AfxMessageBox("Bit per pixel magnification factors of 1:1, 1:2 and 1:4 only supported");
	}

	m_lookup = new BYTE[nLookupTableEntries * m_magnification];
	LPWORD p_lookup16bits = (LPWORD)m_lookup ;
	LPDWORD p_lookup32bits = (LPDWORD)m_lookup ;
	LPBYTE p_lookup8bits = (LPBYTE)m_lookup ;

	int pixelmask =(1 << srcBpp) -1;


	int i=0;
	while ( i < nLookupTableEntries)
	{
		int pixel0,pixel1,pixel2,pixel3;
		int bits = i;
		int dst_pixel;

		// DEBUG
		pixelmask =(1 << srcBpp) -1;
		
		pixel3 = bits & pixelmask;
		//bits <<= srcBpp;
		bits >>= srcBpp;
		
		pixel2 = bits & pixelmask;
		bits >>= srcBpp;
		
		pixel1 = bits & pixelmask;
		bits >>= srcBpp;
	
		pixel0 = bits & pixelmask;
		bits >>= srcBpp;

#ifdef LEFT_TO_RIGHT
		dst_pixel = (((((pixel0 << dstBpp)	| pixel1) << dstBpp) | pixel2) << dstBpp) | pixel3;
#else
		dst_pixel = (((((pixel3 << dstBpp)	| pixel2) << dstBpp) | pixel1) << dstBpp) | pixel0;
#endif

		switch (m_magnification)
		{
		case 1:
			*p_lookup8bits++ =dst_pixel;
				break;
		case 2:
			*p_lookup16bits++ =dst_pixel;
				break;
		case 4:
			*p_lookup32bits++ =dst_pixel;
		}

		++i;
	}
}

void CPixelDepthChanger::Update(void)
{
	if (m_pdstBits == NULL) return;
	
	DWORD nByte = 0;
	

	switch (m_magnification)
	{
	case 1:
		{
		LPBYTE p_lookup8bits = (LPBYTE)m_lookup ;
		LPBYTE pdstBits8bits = (LPBYTE)m_pdstBits ;
		LPBYTE psrcBits8bits = (LPBYTE)m_psrcBits ;

#ifndef BOTTOM_TO_TOP
		int count = m_dwBytes;
		psrcBits8bits += m_srcSize - m_dwBytes;
#endif

		BYTE index;

		while (nByte < m_srcSize)
		{
			index = *psrcBits8bits++;
			//byte_lookup = p_lookup8bits[index];
			//pdstBits8bits[nByte] = byte_lookup; //why use the lookup, we could just copy?
			
			pdstBits8bits[nByte] = index;

#ifndef BOTTOM_TO_TOP
			if (--count == 0) {
				count = m_dwBytes;
				psrcBits8bits -= 2*m_dwBytes;
			}
#endif
			++nByte;
		}
		break;
		}
	case 2:
		{
		LPWORD p_lookup16bits = (LPWORD)m_lookup ;
		LPWORD pdstBits16bits = (LPWORD)m_pdstBits ;
		LPBYTE psrcBits8bits = (LPBYTE)m_psrcBits ;

#ifndef BOTTOM_TO_TOP
		int count = m_dwBytes;
		psrcBits8bits += m_srcSize - m_dwBytes;
#endif

		while (nByte < m_srcSize)
		{

//			char buf[30]; sprintf(buf,"%d %d",nByte,psrcBits8bits-m_psrcBits); AfxMessageBox(buf);

			pdstBits16bits[nByte] = p_lookup16bits[*psrcBits8bits++];

#ifndef BOTTOM_TO_TOP
			if (--count == 0) {
				count = m_dwBytes;
				psrcBits8bits -= 2*m_dwBytes;
			}
#endif

			++nByte;
		}
		break;
		}
	 case 4: 
		{
		LPDWORD p_lookup32bits = (LPDWORD)m_lookup ;
		LPDWORD pdstBits32bits = (LPDWORD)m_pdstBits ;
		while (nByte < m_srcSize)
		{

			pdstBits32bits[nByte] = p_lookup32bits[m_psrcBits[nByte]];

			++nByte;
		}
		break;
		 }
	}


}


CPixelDepthChanger::~CPixelDepthChanger()
{
	if (m_lookup !=NULL)
	{
		delete[] m_lookup;
	}
	if (m_bDelete_pdstBits)
	{
		delete[] m_pdstBits;
	}
	delete[] m_pshadowsrcBits;
}

DWORD CPixelDepthChanger::VolumeFromWidthHeightDepth(int srcWidth, int srcHeight, int srcBpp)
{
		/* DR modified - this is dodgy! */
		m_srcWidth = srcWidth;
		m_srcHeight = srcHeight;
		m_srcBpp = srcBpp;
	
		
		m_dwBytes = ((DWORD) srcWidth * srcBpp) / 32;


		if(((DWORD) srcWidth * srcBpp) % 32) {
			m_dwBytes++;
		}
		m_dwBytes *= 4;  //rows are multiples of four bytes
		return m_dwBytes * srcHeight; // no compression
		
}

#if 0
CRect CPixelDepthChanger::GetInvalidRect()
{
	//compare shadow buffer with src buffer bits starting top left
	// stop at the left most upper most byte that is different
	// then compore staring bottom right
	// returns the larget rectangle containing differences
	// once the shadow buffer has been updated with those differences

	CRect rectBounding;
	rectBounding.SetRectEmpty();

    return rectBounding;

	//test memset ( m_pshadowsrcBits + 4* m_srcWidth '0', m_srcWidth); //make some lines black (actually srcbits will have been changed by other process)

	// for very large unchanging screen this might return faster; slower refreshTimer interval is probably more sensible
	//if (memcmp(m_psrcBits,	m_pshadowsrcBits,m_srcSize)==0)
	//{
	//	return rectBounding;  
	//}

	DWORD nByte =0; 
	while (nByte  < m_srcSize && m_psrcBits[nByte] == m_pshadowsrcBits[nByte])
	{
		++nByte;
	}
	if (nByte == m_srcSize)
	{
		return rectBounding;  
	}

	DWORD leftmost = nByte;

	CPoint pttopleft(nByte * m_srcBpp % m_srcWidth, (nByte * m_srcBpp / m_srcWidth));

	nByte = m_srcSize-1;
	while (nByte  > 0 && m_psrcBits[nByte] == m_pshadowsrcBits[nByte])
	{
		--nByte;
	}
	
	DWORD rightmost = nByte;

	CPoint ptbottomright(nByte * m_srcBpp % m_srcWidth, (nByte * m_srcBpp / m_srcWidth) + m_srcBpp);


	rectBounding = CRect( pttopleft.x, pttopleft.y, ptbottomright.x, ptbottomright.y );

	//test rectBounding= CRect (0,0,m_srcWidth/2, m_srcHeight/2) ; //will flash top left quarter of window any size if logical/device coords correct

	memcpy (&m_pshadowsrcBits[leftmost] ,&m_psrcBits[leftmost], rightmost - leftmost +1 ); //validate the shadow buffer  

	return rectBounding;
}
#endif

CSize CPixelDepthChanger::GetSrcSize()
{
	return CSize(m_srcWidth, m_srcHeight);
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美国产日韩亚洲一区| 成人开心网精品视频| 91视频国产资源| 国产人成一区二区三区影院| 蜜桃视频一区二区| 欧美日韩成人综合| 亚洲成人精品一区二区| 91免费看`日韩一区二区| 久久久不卡网国产精品一区| 久草这里只有精品视频| 欧美日韩成人高清| 五月婷婷综合网| 91麻豆精品国产91久久久资源速度| 日本视频中文字幕一区二区三区| 色88888久久久久久影院按摩| 综合av第一页| 欧美日精品一区视频| 首页国产丝袜综合| 26uuu精品一区二区三区四区在线| 国产伦精品一区二区三区免费迷| 欧美va在线播放| 成人国产精品免费观看| 亚洲欧美自拍偷拍| 56国语精品自产拍在线观看| 裸体健美xxxx欧美裸体表演| 久久这里只有精品首页| av一区二区三区黑人| 日本不卡不码高清免费观看| 欧美激情中文不卡| 欧美福利电影网| 国产精品一区免费视频| 精品在线免费视频| 日韩一区二区三区电影在线观看 | 亚洲丰满少妇videoshd| 欧美一区二区三区成人| thepron国产精品| 免费观看30秒视频久久| 日韩理论片在线| 欧美成人福利视频| 欧美妇女性影城| 91视频你懂的| 99精品欧美一区| 国产成人av影院| 久久99九九99精品| 日韩av成人高清| 日韩影院免费视频| 美女国产一区二区三区| 亚洲黄色小视频| 亚洲人成在线播放网站岛国| 久久精品一区八戒影视| 久久久亚洲国产美女国产盗摄| 欧美艳星brazzers| 在线观看日韩高清av| 在线观看www91| 在线看不卡av| 91啪九色porn原创视频在线观看| 精品一区二区三区的国产在线播放| 亚洲一卡二卡三卡四卡 | 国产亚洲成av人在线观看导航| 欧美放荡的少妇| 日韩精品一区二区在线| 欧美大片一区二区| 精品处破学生在线二十三| 精品国产3级a| 国产精品国产三级国产aⅴ入口| 综合久久久久久| 亚洲国产成人av| 国产一区二区免费看| 99精品视频中文字幕| 色又黄又爽网站www久久| 欧美三级日韩三级| 日韩精品在线一区二区| 亚洲欧洲在线观看av| 亚洲成人三级小说| 国内精品久久久久影院色| 色呦呦一区二区三区| 日韩区在线观看| 日韩毛片高清在线播放| 婷婷成人综合网| 成人免费毛片片v| 91精品国产全国免费观看| 国产精品免费视频一区| av一区二区三区四区| 欧美视频一区二区三区在线观看| 日韩欧美一卡二卡| 亚洲精品国产高清久久伦理二区| 三级不卡在线观看| 9l国产精品久久久久麻豆| 日韩免费性生活视频播放| 亚洲欧美激情在线| 成人v精品蜜桃久久一区| 精品人在线二区三区| 日韩福利电影在线| 在线观看免费一区| 2020国产精品自拍| 欧美日韩亚洲高清一区二区| 日韩一级大片在线| 香蕉av福利精品导航| 一本大道久久a久久综合婷婷| 久久久亚洲高清| 狠狠色丁香婷婷综合| 欧美高清精品3d| 美女一区二区视频| 欧美一区二区在线不卡| 蜜臀va亚洲va欧美va天堂 | 精品一区二区三区不卡| 欧美成人精品二区三区99精品| 奇米色777欧美一区二区| 在线不卡中文字幕| 麻豆视频观看网址久久| 精品黑人一区二区三区久久| 蜜臀久久99精品久久久画质超高清| 欧美男人的天堂一二区| 奇米精品一区二区三区在线观看一| 欧美日韩精品专区| 精品无码三级在线观看视频| 337p粉嫩大胆噜噜噜噜噜91av| 国产激情一区二区三区| 日韩理论电影院| 在线不卡中文字幕| 国产中文字幕精品| 亚洲精品第1页| 一区二区三区高清在线| 7777精品伊人久久久大香线蕉最新版| 日韩av一二三| 亚洲免费观看在线视频| 日韩欧美成人激情| 不卡av在线免费观看| 亚洲gay无套男同| 欧美精品一区二区三区蜜桃| 在线观看一区二区视频| 久久99久久精品| 亚洲成在人线在线播放| 欧美高清在线一区| 欧美一区三区二区| 欧洲精品一区二区| 99精品热视频| 国产成人av一区二区三区在线 | 中文字幕五月欧美| 久久这里都是精品| 日韩一区二区三区精品视频| av资源网一区| 成人精品在线视频观看| 久久爱www久久做| 美国十次综合导航| 免费黄网站欧美| 无码av免费一区二区三区试看 | 美女视频一区在线观看| 亚洲综合av网| 亚洲永久精品国产| 樱花草国产18久久久久| 专区另类欧美日韩| 综合色中文字幕| 亚洲婷婷综合久久一本伊一区| 国产清纯白嫩初高生在线观看91 | 国产亚洲欧美色| 国产日韩av一区二区| 中文av字幕一区| 亚洲欧美自拍偷拍色图| 亚洲精品免费在线| 视频一区二区三区中文字幕| 在线亚洲高清视频| 91电影在线观看| 欧美一区二区三区在线看| 26uuu久久天堂性欧美| 久久久精品综合| 91福利精品第一导航| 成人免费观看视频| 欧美自拍偷拍一区| 日韩视频在线永久播放| 国产精品污污网站在线观看 | 欧美三级日韩在线| 日韩精品中文字幕在线一区| 国产欧美久久久精品影院| 亚洲欧洲av色图| 日韩福利视频网| 91蜜桃视频在线| 久久综合视频网| 亚洲成av人片一区二区梦乃| 国产成人在线视频播放| 欧美精品在线观看一区二区| 欧美精品一区二区三区蜜桃| 午夜精品福利在线| 成人一区二区三区在线观看| 日韩欧美资源站| 亚洲欧洲综合另类| 成人精品视频一区| 久久综合色之久久综合| 亚洲成av人在线观看| 色吊一区二区三区| 国产精品剧情在线亚洲| 国产盗摄一区二区三区| 91精品中文字幕一区二区三区| 亚洲视频在线一区观看| 国产高清在线精品| 久久久久久久久久看片| 麻豆国产精品视频| 日韩欧美在线影院| 午夜精品久久久久久| 3d动漫精品啪啪一区二区竹菊|