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

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

?? voimage.cpp

?? Windows CE下操作、顯示圖像的類。可以打開、顯示png、gif、jpg等系統支持的格式。
?? CPP
?? 第 1 頁 / 共 2 頁
字號:
?//-------------------------------------------------------------------
// VOImage implementation
//-------------------------------------------------------------------
//
// Copyright ?000 Virtual Office Systems Incorporated
// All Rights Reserved
//
// This code may be used in compiled form in any way you desire. This
// file may be redistributed unmodified by any means PROVIDING it is
// not sold for profit without the authors written consent, and
// providing that this notice and the authors name is included.
//
// This code can be compiled, modified and distributed freely, providing
// that this copyright information remains intact in the distribution.
//
// This code may be compiled in original or modified form in any private
// or commercial application.
//
// This file is provided "as is" with no expressed or implied warranty.
// The author accepts no liability for any damage, in any form, caused
// by this code. Use it at your own risk.
//-------------------------------------------------------------------

#include "stdafx.h"

#include "VOImage.h"

#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#define new DEBUG_NEW
#endif

#ifdef _WIN32_WCE
#pragma comment(lib, "imgdecmp.lib")
#endif

//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////

int		CVOImage::g_iScale		= 100;
int		CVOImage::g_iMaxWidth	= 10000;
int		CVOImage::g_iMaxHeight	= 10000;
BOOL	CVOImage::g_bStretchBlt	= FALSE;

CVOImage::CVOImage()
		: m_hDC(NULL),
		m_hBitmap(NULL),
		m_dwWidth(0),
		m_dwHeight(0),
		m_hModuleResource(NULL),
		m_dwResourceID(0)
{}

CVOImage::~CVOImage()
{
	::DeleteDC(m_hDC);
	::DeleteObject(m_hBitmap);
}

BOOL CVOImage::Load(HDC hdc, LPCTSTR pcszFileName)
{
	if ( NULL != m_hBitmap )
	{
		if ( GetFileName().GetLength() && GetFileName() == pcszFileName )
		{
			return TRUE;	// Already Loaded
		}

		::DeleteObject(m_hBitmap);
	}

	if ( NULL == m_hDC )
	{
		m_hDC = ::CreateCompatibleDC(hdc);

		const	int	iHorzres	= ::GetDeviceCaps(hdc, HORZRES);
		const	int	iVertres	= ::GetDeviceCaps(hdc, VERTRES);
		HBITMAP	hbitmap			= ::CreateCompatibleBitmap(hdc, iHorzres, iVertres);

		::SelectObject(m_hDC, hbitmap);
	}

	BYTE	szBuffer[1024]	= {0};
	HANDLE	hFile			= INVALID_HANDLE_VALUE;

#ifdef _WIN32_WCE
	HRESULT hr;

	DecompressImageInfo	dii;
#endif

	hFile = ::CreateFile(pcszFileName,
						 GENERIC_READ,
						 FILE_SHARE_READ,
						 NULL,
						 OPEN_EXISTING,
						 FILE_ATTRIBUTE_NORMAL,
						 NULL);

	if ( hFile == INVALID_HANDLE_VALUE )
	{
		return FALSE;
	}

#ifdef _WIN32_WCE
	// Fill in the 'DecompressImageInfo' structure
	dii.dwSize = sizeof( DecompressImageInfo );		// Size of this structure
	dii.pbBuffer = szBuffer;						// Pointer to the buffer to use for data
	dii.dwBufferMax = 1024;							// Size of the buffer
	dii.dwBufferCurrent = 0;						// The amount of data which is current in the buffer
	dii.phBM = &m_hBitmap;							// Pointer to the bitmap returned (can be NULL)
	dii.ppImageRender = NULL;						// Pointer to an IImageRender object (can be NULL)
	dii.iBitDepth = ::GetDeviceCaps(hdc, BITSPIXEL);// Bit depth of the output image
	dii.lParam = ( LPARAM ) hFile;					// User parameter for callback functions
	dii.hdc = m_hDC;								// HDC to use for retrieving palettes
	dii.iScale = g_iScale;							// Scale factor (1 - 100)
	dii.iMaxWidth = g_iMaxWidth;					// Maximum width of the output image
	dii.iMaxHeight = g_iMaxHeight;					// Maximum height of the output image
	dii.pfnGetData = GetImageData;					// Callback function to get image data
	dii.pfnImageProgress = ImageProgress;			// Callback function to notify caller of progress decoding the image
	dii.crTransparentOverride = ( UINT ) - 1;		// If this color is not (UINT)-1, it will override the
	// transparent color in the image with this color. (GIF ONLY)

	// Process and decompress the image data
	hr = ::DecompressImageIndirect( &dii );
#endif

	// Clean up
	::CloseHandle(hFile);

	HBITMAP hbitmapOld = (HBITMAP)::SelectObject(m_hDC, m_hBitmap);

	::DeleteObject(hbitmapOld);

	BITMAP	bmp;

	::GetObject(m_hBitmap, sizeof(BITMAP), &bmp);

	m_dwWidth			= bmp.bmWidth;
	m_dwHeight			= bmp.bmHeight;
	m_wPlanes			= bmp.bmPlanes;
	m_wBitsPixel		= bmp.bmBitsPixel;

	m_strFileName		= pcszFileName;
	m_dwResourceID		= 0;
	m_hModuleResource	= 0;

	return TRUE;
}

HBITMAP CVOImage::Copy() const
{
	BITMAP	bm, bmNew;
	HBITMAP hNew;

	::GetObject(m_hBitmap, sizeof(BITMAP), &bm);

	HDC hdc = ::CreateCompatibleDC(m_hDC);

	int cx = bm.bmWidth;
	int cy = bm.bmHeight;

	hNew = ::CreateCompatibleBitmap(m_hDC, cx, cy);
	::SelectObject(hdc, hNew);

	RECT rect;

	rect.left	= 0;
	rect.top	= 0;
	rect.right	= cx;
	rect.bottom	= cy;

	::FillRect(hdc, &rect, (HBRUSH)::GetStockObject(WHITE_BRUSH));

	if ( Draw(hdc, 0, 0) )
	{
		HBITMAP hPrev = (HBITMAP) ::GetObject(hNew, sizeof(BITMAP), &bmNew);

		::SelectObject(hdc, hPrev);
	}

	::DeleteDC(hdc);

	return hNew;
}

BOOL CVOImage::Draw(HDC hdc, int x, int y, int cx, int cy) const
{
	BITMAP	bmp;

	g_bStretchBlt = !(cx == -1 && cy == -1);

	::GetObject(m_hBitmap, sizeof(BITMAP), &bmp);

	BOOL bResult = FALSE;

	if ( g_bStretchBlt )	// Stretch to fit
	{
		bResult = ::StretchBlt(hdc,
							   x , y, cx, cy,
							   m_hDC,
							   0, 0,
							   bmp.bmWidth, bmp.bmHeight,
							   SRCCOPY);
	}
	else
	{
		bResult = ::BitBlt(hdc,
						   x, y,
						   bmp.bmWidth, bmp.bmHeight,
						   m_hDC,
						   0, 0,
						   SRCCOPY);
	}

	return bResult;
}

BOOL CVOImage::DrawTranslucent(HDC hdc,
							   int x,
							   int y,
							   int nPercent,
							   int cx,
							   int cy,
							   COLORREF crTransparent) const
{
	BITMAP	bmpBG, bmpImage;
	HDC		hdcBG		= ::CreateCompatibleDC(hdc);
	HDC		hdcImage	= ::CreateCompatibleDC(hdc);

	if ( -1 == cx )
	{
		cx = GetWidth();
	}

	if ( -1 == cy )
	{
		cy = GetHeight();
	}

	BITMAPINFO i;

	::memset( &i.bmiHeader, 0, sizeof(BITMAPINFOHEADER) );
	i.bmiHeader.biWidth		= cx;
	i.bmiHeader.biHeight	= cy;
	i.bmiHeader.biPlanes	= 1;
	i.bmiHeader.biBitCount	= 24;
	i.bmiHeader.biSize		= sizeof(BITMAPINFOHEADER);

	PBYTE	pBitsBG		= NULL;
	HBITMAP	hbitmapBG	= ::CreateDIBSection(hdc,
										   &i,
										   DIB_RGB_COLORS,
										   (PVOID*) & pBitsBG,
										   NULL,
										   0);

	if ( NULL == hbitmapBG )
	{
		/*DWORD dwError = */::GetLastError();

		DebugBreak();

		return FALSE;
	}

	// Copy the background into the 24bit Background DIB
	HBITMAP hbitmapOld = (HBITMAP)::SelectObject(hdcBG, hbitmapBG);
	::BitBlt(hdcBG, 0, 0, cx, cy, hdc, x, y, SRCCOPY);
	::SelectObject(hdcBG, hbitmapOld);


	// Create a matching 24bit DIB Section to hold the image data
	PBYTE	pBitsImage		= NULL;
	HBITMAP	hbitmapImage	= ::CreateDIBSection(hdc,
						   &i,
						   DIB_RGB_COLORS,
						   (PVOID*) & pBitsImage,
						   NULL,
						   0);

	if ( NULL == hbitmapImage )
	{
		/*DWORD dwError = */::GetLastError();

		::DebugBreak();

		return FALSE;
	}

	// Copy the bitmap into the 24bit DIB
	hbitmapOld = (HBITMAP)SelectObject(hdcImage, hbitmapImage);

	if ( RGB(192, 192, 192) == crTransparent )
	{
		::StretchBlt(hdcImage,
					 0, 0, cx, cy,
					 m_hDC,
					 0, 0, GetWidth(), GetHeight(),
					 SRCCOPY);
	}
	else
	{
#ifdef _WIN32_WCE
		::BitBlt(hdcImage, 0, 0, cx, cy, hdc, x, y, SRCCOPY);

		::TransparentImage(hdcImage,
						   0,
						   0,
						   cx,
						   cy,
						   m_hDC,
						   0,
						   0,
						   GetWidth(),
						   GetHeight(),
						   crTransparent);
#else
		::StretchBlt(hdcImage,
					 0, 0, cx, cy,
					 m_hDC,
					 0, 0, GetWidth(), GetHeight(),
					 SRCCOPY);
#endif
	}

	::SelectObject(hdcImage, hbitmapOld);

	::GetObject(hbitmapImage, sizeof(BITMAP), &bmpImage);
	::GetObject(hbitmapBG, sizeof(BITMAP), &bmpBG);

	PBYTE	pPixelBG	= NULL;
	PBYTE	pPixelImage	= NULL;
	int		r, g, b;
	int		nPercentBG	= 100 - nPercent;

	for ( int yOffset = 0; yOffset < cy; ++yOffset )
	{
		for ( int xOffset = 0; xOffset < cx; ++xOffset )
		{
			pPixelBG = (PBYTE)bmpBG.bmBits + (cx * yOffset + xOffset) * 3;
			pPixelImage = (PBYTE)bmpImage.bmBits + (cx * yOffset + xOffset) * 3;

			r = ((pPixelImage[2] * nPercent / 100) + ((int)pPixelBG[2] * nPercentBG / 100));
			g = ((pPixelImage[1] * nPercent / 100) + ((int)pPixelBG[1] * nPercentBG / 100));
			b = ((pPixelImage[0] * nPercent / 100) + ((int)pPixelBG[0] * nPercentBG / 100));

			pPixelBG[2] = (BYTE)r;
			pPixelBG[1] = (BYTE)g;
			pPixelBG[0] = (BYTE)b;
		}
	}

	hbitmapOld = (HBITMAP)(::SelectObject(hdcBG, hbitmapBG));

	::BitBlt(hdc, x, y, cx, cy, hdcBG, 0, 0, SRCCOPY );

	::SelectObject(hdcBG, hbitmapOld);

	::DeleteObject(hbitmapImage);
	::DeleteObject(hbitmapBG);

	::DeleteDC(hdcImage);
	::DeleteDC(hdcBG);

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产精品三级视频| 国产一区二区三区美女| 麻豆久久久久久久| 99久久婷婷国产综合精品电影| 欧美无砖砖区免费| 欧美激情综合五月色丁香| 日韩vs国产vs欧美| 在线观看日韩av先锋影音电影院| 久久综合av免费| 日日夜夜精品视频天天综合网| 成人深夜在线观看| 久久精品亚洲国产奇米99| 午夜激情综合网| 在线亚洲一区二区| 国产精品久久久久久久久图文区 | 欧美色综合影院| 久久久久成人黄色影片| 日韩影院在线观看| 欧美色手机在线观看| 亚洲特黄一级片| 成人激情小说乱人伦| 国产性天天综合网| 国产精品白丝jk白祙喷水网站| 日韩三级视频在线观看| 日日噜噜夜夜狠狠视频欧美人| 91久久一区二区| 亚洲免费观看高清完整版在线观看| 国产美女精品人人做人人爽| 精品久久久久久亚洲综合网| 免费成人在线播放| 欧美变态凌虐bdsm| 久久国产精品99精品国产| 日韩欧美国产三级| 看电影不卡的网站| 欧美精品一区二| 国产一区二区在线观看免费| www国产精品av| 激情欧美一区二区三区在线观看| 日韩欧美国产系列| 国产夫妻精品视频| 日韩一区在线看| 在线观看视频欧美| 视频精品一区二区| 欧美精品一区二区三区久久久 | 欧美激情综合五月色丁香小说| 狠狠色丁香婷婷综合| 久久精品免费在线观看| 成人午夜免费av| 亚洲欧美日韩小说| 这里只有精品电影| 国产一区二区三区久久久| 国产欧美一区二区在线| 99精品桃花视频在线观看| 亚洲精品视频一区| 91精品国产综合久久福利软件| 蜜桃视频一区二区三区在线观看| 精品国产91九色蝌蚪| 成人综合婷婷国产精品久久免费| 亚洲欧美一区二区视频| 欧美日韩精品一区二区天天拍小说| 免费成人在线观看视频| 国产精品沙发午睡系列990531| 欧美成人video| 不卡电影免费在线播放一区| 一区二区三区精品在线观看| 3atv在线一区二区三区| 国产馆精品极品| 夜夜嗨av一区二区三区中文字幕| 日韩一区二区三区视频在线| 国产不卡一区视频| 午夜精品久久久久久久久久| 国产日韩精品一区二区浪潮av| 色妞www精品视频| 美女视频黄频大全不卡视频在线播放| 中文字幕乱码久久午夜不卡| 欧美精品亚洲一区二区在线播放| 国产精品888| 婷婷综合在线观看| 成人免费在线视频观看| 日韩一区二区高清| 欧亚洲嫩模精品一区三区| 国产一区二区三区四| 天天影视网天天综合色在线播放| 中文无字幕一区二区三区| 在线播放国产精品二区一二区四区| 国产成人精品aa毛片| 亚洲成人手机在线| 综合电影一区二区三区 | 欧美激情在线一区二区| 制服丝袜亚洲播放| 91成人看片片| 波多野结衣在线一区| 韩国视频一区二区| 日韩专区一卡二卡| 亚洲一区视频在线观看视频| 亚洲国产精品二十页| 欧美tickling挠脚心丨vk| 欧美在线|欧美| 色综合天天综合网天天狠天天| 裸体在线国模精品偷拍| 天天av天天翘天天综合网| 亚洲免费资源在线播放| 国产欧美日韩麻豆91| 精品国产免费视频| 欧美成人乱码一区二区三区| 欧美精品v日韩精品v韩国精品v| 91农村精品一区二区在线| 成人精品视频网站| 成人丝袜18视频在线观看| 丁香六月综合激情| 成人一级视频在线观看| 国产精品69久久久久水密桃| 国产专区欧美精品| 极品销魂美女一区二区三区| 免费亚洲电影在线| av电影天堂一区二区在线| 国产一区二区美女诱惑| 精品一区二区三区av| 激情国产一区二区| 国产寡妇亲子伦一区二区| 国产精品一区二区你懂的| 国产福利视频一区二区三区| 国产精品亚洲а∨天堂免在线| 激情文学综合丁香| 国产一区在线视频| 高清不卡一二三区| 91亚洲资源网| 欧美日韩国产免费| 日韩三级免费观看| 久久精品人人爽人人爽| 国产精品国产三级国产普通话99| 中文字幕亚洲电影| 亚洲国产日韩一级| 另类专区欧美蜜桃臀第一页| 国产米奇在线777精品观看| 成人免费看视频| 在线看国产一区二区| 制服丝袜国产精品| 国产亚洲成av人在线观看导航| 国产精品毛片久久久久久| 亚洲免费观看高清完整版在线 | 91国偷自产一区二区使用方法| 91成人在线观看喷潮| 欧美一区二视频| 中文字幕第一区综合| 亚洲一区免费在线观看| 久久99精品久久久久久久久久久久| 国产乱人伦偷精品视频不卡 | 欧美国产日产图区| 亚洲午夜精品在线| 国产剧情一区二区三区| 在线观看视频一区二区| 精品免费一区二区三区| 亚洲色图一区二区三区| 蜜桃精品在线观看| 色悠悠亚洲一区二区| 日韩欧美成人激情| 亚洲一区在线免费观看| 国产在线视频一区二区三区| 91麻豆精品一区二区三区| 日韩丝袜美女视频| 一区二区三区在线视频观看58| 免费欧美日韩国产三级电影| 成人短视频下载| 日韩午夜av电影| 亚洲精品国产无套在线观| 黑人精品欧美一区二区蜜桃 | 欧美一级欧美一级在线播放| 国产精品久久久久永久免费观看| 亚洲第一会所有码转帖| av不卡在线观看| 久久丝袜美腿综合| 爽爽淫人综合网网站| 色综合久久久久| 国产日产欧美精品一区二区三区| 亚洲成av人片一区二区梦乃| www.日韩精品| 久久精品一区八戒影视| 免费成人结看片| 欧美日韩一区三区四区| 亚洲欧洲制服丝袜| 丰满少妇久久久久久久| 久久综合色8888| 美女性感视频久久| 91精选在线观看| 亚洲成人一区在线| 色噜噜狠狠成人网p站| 国产精品国产三级国产普通话蜜臀 | 日韩欧美一级在线播放| 亚洲第一二三四区| 欧美亚洲综合在线| 一区二区三区精品视频在线| caoporn国产精品| 中文字幕av资源一区| 高清国产一区二区| 日本一区二区三区免费乱视频 | 婷婷激情综合网| 欧美日韩成人综合| 午夜影视日本亚洲欧洲精品| 欧美性色欧美a在线播放|