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

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

?? cpixeldepthchanger.cpp

?? 講解用ARM來控制LCD以及鍵盤的很好的源代碼
?? 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一区二区三区免费野_久草精品视频
热久久国产精品| 国产一区美女在线| 韩国午夜理伦三级不卡影院| 福利电影一区二区| 欧美日韩激情在线| 中文字幕在线不卡一区二区三区| 日本午夜精品视频在线观看| 成人永久看片免费视频天堂| 日韩欧美一二三区| 一区二区三区四区在线| 高清免费成人av| 欧美岛国在线观看| 视频一区二区三区入口| 99在线视频精品| 国产婷婷精品av在线| 久久精品国产秦先生| 欧美精品乱码久久久久久| 亚洲免费成人av| 成av人片一区二区| 国产午夜亚洲精品不卡| 麻豆91精品91久久久的内涵| 久久综合狠狠综合久久综合88| 丝袜美腿亚洲综合| 色一区在线观看| **欧美大码日韩| 国产成人aaaa| 国产日韩欧美a| 国产福利一区在线| 久久久av毛片精品| 国产精品18久久久| 国产欧美日韩另类视频免费观看 | 欧美色手机在线观看| 国产精品久久久久久久久晋中| 国产精品一二三区在线| www日韩大片| 国内精品久久久久影院色| 欧美成人一区二区| 国产在线精品免费av| 久久亚洲一级片| 成人综合婷婷国产精品久久免费| 国产午夜精品在线观看| 大尺度一区二区| 亚洲桃色在线一区| 欧美日韩在线不卡| 天堂久久一区二区三区| 日韩一卡二卡三卡四卡| 久久99日本精品| 欧美韩国日本一区| 99精品久久99久久久久| 夜夜嗨av一区二区三区中文字幕| 欧美日韩免费高清一区色橹橹| 视频一区二区三区入口| 精品国产91久久久久久久妲己| 国产综合久久久久久鬼色| 国产精品你懂的在线欣赏| 91蜜桃网址入口| 日韩国产精品91| 日本一区二区三区国色天香| 97成人超碰视| 男女男精品视频网| 国产女人aaa级久久久级| 95精品视频在线| 男女性色大片免费观看一区二区| 久久久精品国产免大香伊| 91丝袜国产在线播放| 日韩电影在线一区二区三区| 久久久久久久久久久久久久久99 | 成人免费视频国产在线观看| 亚洲乱码国产乱码精品精的特点| 欧美久久久久久久久中文字幕| 国内欧美视频一区二区| 一区二区三区91| 欧美电影免费观看高清完整版在线 | 中文字幕精品一区二区精品绿巨人 | 狠狠色丁香久久婷婷综合丁香| 国产精品久久久久久久久动漫 | 69成人精品免费视频| 国产白丝精品91爽爽久久| 一区二区三国产精华液| 久久先锋影音av鲁色资源网| 欧美午夜精品久久久久久孕妇| 国产一区二区在线看| 亚洲国产人成综合网站| 国产亚洲一本大道中文在线| 在线播放视频一区| 欧美大片国产精品| 欧美日韩一级黄| 91视视频在线直接观看在线看网页在线看| 蜜臀精品久久久久久蜜臀| 亚洲男人天堂一区| 欧美—级在线免费片| 欧美成人a∨高清免费观看| 欧美亚洲动漫精品| 97se亚洲国产综合自在线不卡| 韩国三级在线一区| 青青草国产成人av片免费| 一区二区三区在线免费观看| 国产精品毛片久久久久久| 欧美精品一区男女天堂| 日韩一卡二卡三卡四卡| 777xxx欧美| 欧美浪妇xxxx高跟鞋交| 欧美最新大片在线看| 99国产精品久久久久| 成人成人成人在线视频| 国产成人精品午夜视频免费 | 亚洲图片欧美视频| 自拍偷在线精品自拍偷无码专区| 国产午夜精品久久| 久久久久国产精品人| 久久亚洲免费视频| 久久婷婷久久一区二区三区| 日韩欧美成人激情| 日韩美女在线视频| 欧美精品一区二区三区在线播放| 26uuu成人网一区二区三区| 日韩欧美一区中文| 精品国产乱码久久久久久1区2区| 欧美一区二区在线免费观看| 欧美一级日韩免费不卡| 欧美电影免费观看高清完整版在线| 日韩精品中文字幕在线不卡尤物 | 国产成人精品影视| 国产v综合v亚洲欧| 99久久精品情趣| 91久久奴性调教| 欧美日韩在线播放三区四区| 精品视频全国免费看| 欧美一区二区三区四区久久| 日韩免费观看高清完整版 | 欧美亚洲高清一区二区三区不卡| 99免费精品视频| 色综合中文字幕国产 | 日韩av电影免费观看高清完整版在线观看| 亚洲一区二区偷拍精品| 亚洲国产成人av网| 日本色综合中文字幕| 青青草原综合久久大伊人精品优势| 精品亚洲免费视频| 成人一区在线观看| 精品一区二区免费看| 成人激情小说网站| 欧美影片第一页| 精品日韩一区二区| 亚洲丝袜另类动漫二区| 亚洲伊人色欲综合网| 久草这里只有精品视频| 成人免费高清在线观看| 欧美性猛交xxxxxx富婆| 精品久久久久久久一区二区蜜臀| 国产精品无人区| 五月天婷婷综合| 国产精品亚洲午夜一区二区三区 | 久久伊99综合婷婷久久伊| 国产精品污网站| 视频在线观看91| 成人免费毛片片v| 91精品国产欧美一区二区18| 国产精品日日摸夜夜摸av| 亚洲成人免费影院| 东方aⅴ免费观看久久av| 欧美精品一级二级三级| 国产精品女人毛片| 美女诱惑一区二区| 色94色欧美sute亚洲13| 久久婷婷国产综合国色天香| 一区二区在线观看免费视频播放| 国产真实乱偷精品视频免| 欧美视频在线不卡| 国产精品无码永久免费888| 久久99日本精品| 欧美肥妇bbw| 亚洲欧美电影院| 懂色av一区二区在线播放| 日韩一区二区三区免费观看| 亚洲激情图片小说视频| 国产a视频精品免费观看| 日韩精品中文字幕一区| 午夜精品一区二区三区免费视频| hitomi一区二区三区精品| 国产色婷婷亚洲99精品小说| 美女脱光内衣内裤视频久久网站 | 国产一区999| 日韩欧美你懂的| 午夜激情一区二区三区| 91麻豆swag| 亚洲欧美日韩中文字幕一区二区三区 | 久久综合九色综合欧美就去吻 | 99麻豆久久久国产精品免费优播| 欧美mv和日韩mv的网站| 成人黄色小视频| 一区二区三区四区激情| 91麻豆精东视频| 青草国产精品久久久久久| 日韩精品一区二区在线观看| 久久69国产一区二区蜜臀| 亚洲成在人线免费| 8v天堂国产在线一区二区| 激情欧美一区二区三区在线观看| 一区二区三区精品在线|