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

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

?? dib.cpp

?? 克里金、反距離插值算法_柵格圖等值線填充等
?? CPP
字號:
// Dib.cpp: implementation of the CDib class.
//
//////////////////////////////////////////////////////////////////////

#include "stdafx.h"
#include "Dib.h"

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

CDib::CDib() throw()
{
	m_pBmpFileHeader = NULL;
	m_pBmpInfo = NULL;
	m_pBmpInfoHeader = NULL;
	m_pRGBTable = NULL;
	m_pDibBits = NULL;
	m_uiNumColors = 0;
}

CDib::~CDib()
{
	Clear();
}

void CDib::Clear() throw()
{
	if(m_pBmpFileHeader != NULL) {
		delete[] m_pBmpFileHeader;
		m_pBmpFileHeader = NULL;
	}
	if(m_pBmpInfo != NULL) {
		delete[] m_pBmpInfo;
		m_pBmpInfo = NULL;
	}
	if(m_pDibBits != NULL) {
		delete[] m_pDibBits;
		m_pDibBits = NULL;
	}
}

void CDib::Load(CString fileName) throw(CImageException) 
{
	CFile file(fileName, CFile::modeRead | CFile::shareDenyNone);
	Load(&file);
}

void CDib::Load(CFile* pFile) throw(CImageException)
{
	Clear();

	m_pBmpFileHeader = new BITMAPFILEHEADER;
	pFile->Read(static_cast<void*>(m_pBmpFileHeader), sizeof(BITMAPFILEHEADER));
	
	if(m_pBmpFileHeader->bfType != 0x4d42) {
		Clear();
		pFile->Close();
		throw CImageException(_T("Failed to load document"));
	} else {
		DWORD dwLength;
		dwLength = m_pBmpFileHeader->bfOffBits - sizeof(BITMAPFILEHEADER);

		m_pBmpInfo = reinterpret_cast<LPBITMAPINFO>(new BYTE[dwLength]);
		pFile->Read(static_cast<void*>(m_pBmpInfo), dwLength);
		m_pBmpInfoHeader = reinterpret_cast<LPBITMAPINFOHEADER>(m_pBmpInfo);

		if((m_pBmpInfoHeader->biClrUsed == 0))
			m_uiNumColors = 1 << m_pBmpInfoHeader->biBitCount;
		else
			m_uiNumColors = m_pBmpInfoHeader->biClrUsed;

		if(m_pBmpInfoHeader->biClrUsed == 0)
			m_pBmpInfoHeader->biClrUsed = m_uiNumColors;
		
		if(m_uiNumColors <= 256)
			m_pRGBTable = reinterpret_cast<RGBQUAD*>(reinterpret_cast<BYTE*>(m_pBmpInfo) + m_pBmpInfoHeader->biSize);

		DWORD dwDibLength = pFile->GetLength() - m_pBmpFileHeader->bfOffBits / 4;
		m_pDibBits = new BYTE[dwDibLength];
		pFile->Read(static_cast<void*>(m_pDibBits), dwDibLength);
	}
}

void CDib::Create(CBitmap* pBitmap) throw(CImageException)
{
	BITMAP Bitmap;
	int rc = pBitmap->GetBitmap(&Bitmap);
	if(rc == 0)
		throw CImageException(_T("Can't get BITMAP from CBitmap*"));

	int iWidthBytes = ((Bitmap.bmWidth * Bitmap.bmBitsPixel + 15) & ~15) >> 3 ;
	DWORD dwImgSize = iWidthBytes * Bitmap.bmHeight;
	
	// File header
	m_pBmpFileHeader = new BITMAPFILEHEADER;
	m_pBmpFileHeader->bfType = 0x4d42;
	m_pBmpFileHeader->bfSize = sizeof(BITMAPFILEHEADER) + sizeof(BITMAPINFO) + dwImgSize; 
	m_pBmpFileHeader->bfReserved1 = 0; 
	m_pBmpFileHeader->bfReserved2 = 0; 
	m_pBmpFileHeader->bfOffBits = sizeof(BITMAPFILEHEADER) + sizeof(BITMAPINFO) + sizeof(RGBQUAD);
	
	// Bitmap Info header - no support for palette mode
	m_pBmpInfo = new BITMAPINFO;
	m_pBmpInfoHeader = reinterpret_cast<LPBITMAPINFOHEADER>(m_pBmpInfo);
	::ZeroMemory(m_pBmpInfoHeader, sizeof(BITMAPINFOHEADER));
	m_pBmpInfoHeader->biSize = sizeof(BITMAPINFOHEADER);
	m_pBmpInfoHeader->biWidth = Bitmap.bmWidth;
	m_pBmpInfoHeader->biHeight = Bitmap.bmHeight;
	m_pBmpInfoHeader->biPlanes = 1;
	m_pBmpInfoHeader->biBitCount = Bitmap.bmPlanes * Bitmap.bmBitsPixel;
	m_pBmpInfoHeader->biSizeImage = dwImgSize;

	// Color Table
	if((m_pBmpInfoHeader->biClrUsed == 0))
		m_uiNumColors = 1 << m_pBmpInfoHeader->biBitCount;
	else
		m_uiNumColors = m_pBmpInfoHeader->biClrUsed;
	if(m_pBmpInfoHeader->biClrUsed == 0)
		m_pBmpInfoHeader->biClrUsed = m_uiNumColors;
	if(m_uiNumColors <= 256) {
		Clear();
		throw CImageException("Palette mode is not supported");
	}
	// Data bits
	m_pDibBits = new BYTE[dwImgSize];
	pBitmap->GetBitmapBits(dwImgSize, m_pDibBits);
	LPBYTE pTemp = new BYTE[iWidthBytes];
	for(int i=0; i<Bitmap.bmHeight/2; i++) {
		::memcpy(pTemp, m_pDibBits+i*iWidthBytes, iWidthBytes);
		::memcpy(m_pDibBits+i*iWidthBytes, m_pDibBits+iWidthBytes*(Bitmap.bmHeight-1-i), iWidthBytes);
		::memcpy(m_pDibBits+iWidthBytes*(Bitmap.bmHeight-1-i), pTemp, iWidthBytes);
	}
	delete[] pTemp;
}

void CDib::Create(int width, int height, LPBYTE pData, int bitCount) throw(CImageException)
{
	ASSERT(pData);
	ASSERT(bitCount > 8);

	Clear();

	int iWidthBytes = ((width * bitCount + 15) & ~15) >> 3 ;
	DWORD dwImgSize = iWidthBytes * height;
	
	// File header
	m_pBmpFileHeader = new BITMAPFILEHEADER;
	m_pBmpFileHeader->bfType = 0x4d42;
	m_pBmpFileHeader->bfSize = sizeof(BITMAPFILEHEADER) + sizeof(BITMAPINFO) + dwImgSize; 
	m_pBmpFileHeader->bfReserved1 = 0; 
	m_pBmpFileHeader->bfReserved2 = 0; 
	m_pBmpFileHeader->bfOffBits = sizeof(BITMAPFILEHEADER) + sizeof(BITMAPINFO) + sizeof(RGBQUAD);

	// Bitmap Info header - no support for palette mode
	m_pBmpInfo = new BITMAPINFO;
	m_pBmpInfoHeader = reinterpret_cast<LPBITMAPINFOHEADER>(m_pBmpInfo);
	::ZeroMemory(m_pBmpInfoHeader, sizeof(BITMAPINFOHEADER));
	m_pBmpInfoHeader->biSize = sizeof(BITMAPINFOHEADER);
	m_pBmpInfoHeader->biWidth = width;
	m_pBmpInfoHeader->biHeight = height;
	m_pBmpInfoHeader->biPlanes = 1;
	m_pBmpInfoHeader->biBitCount = bitCount;
	m_pBmpInfoHeader->biSizeImage = dwImgSize;

	// Color Table
	if((m_pBmpInfoHeader->biClrUsed == 0))
		m_uiNumColors = 1 << m_pBmpInfoHeader->biBitCount;
	else
		m_uiNumColors = m_pBmpInfoHeader->biClrUsed;
	if(m_pBmpInfoHeader->biClrUsed == 0)
		m_pBmpInfoHeader->biClrUsed = m_uiNumColors;
	
	if(m_uiNumColors <= 256) {
		Clear();
		throw CImageException("Palette mode is not supported");
	}
	// data bits
	m_pDibBits = pData;		
}

void CDib::Save(CString fileName) throw(CImageException) 
{
	CFile file;
	if(file.Open(fileName, CFile::modeWrite | CFile::modeCreate) == 0)
		throw CImageException(_T("Cannot open a file"));
	Save(&file);
}

void CDib::Save(CFile* pFile) throw(CImageException)
{
	pFile->Write(static_cast<void*>(m_pBmpFileHeader), sizeof(BITMAPFILEHEADER));
	DWORD dwLength;
	if(m_uiNumColors <= 256)
		dwLength = sizeof(BITMAPINFOHEADER) + m_uiNumColors*sizeof(RGBQUAD);
	else
		dwLength = sizeof(BITMAPINFOHEADER) + sizeof(RGBQUAD);
	pFile->Write(static_cast<void*>(m_pBmpInfo), dwLength);

	DWORD dwImgSize = (((GetWidth() * m_pBmpInfoHeader->biBitCount + 15) & ~15) >> 3) * GetHeight() ;
	pFile->Write(static_cast<void*>(m_pDibBits), dwImgSize);
}

void CDib::Draw(CDC* pdc, int x, int y, double scale, DWORD dwROPCode) const throw(CImageException) {
	if(!m_pBmpInfo)
		throw CImageException();
	int nScanLines = ::StretchDIBits(pdc->GetSafeHdc(), x, y, (int)(GetWidth()*scale) , (int)(GetHeight()*scale), 0, 0, GetWidth(), GetHeight(), 
									m_pDibBits, m_pBmpInfo, DIB_RGB_COLORS, dwROPCode);
	if(nScanLines == GDI_ERROR)
		throw CImageException(_T("CDib::Draw exception"));
}

void CDib::Draw(CDC* pdc, int x, int y, int width, int height, DWORD dwROPCode) const throw(CImageException) {
	if(!m_pBmpInfo)
		throw CImageException();
	int nScanLines = ::StretchDIBits(pdc->GetSafeHdc(), x, y, width , height, 0, 0, GetWidth(), GetHeight(), 
									m_pDibBits, m_pBmpInfo, DIB_RGB_COLORS, dwROPCode);
	if(nScanLines == GDI_ERROR)
		throw CImageException(_T("CDib::Draw exception"));
}

COLORREF CDib::GetPixel(int x, int y) const throw() {
	int width = GetWidth();
	int height = GetHeight();

	BYTE* pDibBits = m_pDibBits;
	BYTE Red;
	BYTE Green;
	BYTE Blue;
	int offset;

	SHORT* psDibBits; // for 16 bit
	BYTE Index;
	RGBQUAD* prgb;

	int bpp = GetBPP();
	switch(bpp) {
	case 1:
	case 2:
	case 4:
	case 8:
		offset = width * (height - 1 - y) + x + 1;
		pDibBits += offset;
		Index = *pDibBits;
		prgb = m_pRGBTable + Index;
		Red = prgb->rgbRed;
		Green = prgb->rgbGreen;
		Blue = prgb->rgbBlue;
		break;
	case 16: // assuming 565
		offset = width * 2 * (height - 1 - y) + (x + 1) * 2;
		pDibBits += offset;
		psDibBits = (SHORT*)pDibBits;
		Blue = *psDibBits >> 11;
		Green = (*psDibBits >> 5) & 63;
		Red = *psDibBits & 127;
		break;
	case 24:
		offset = width * 3 * (height -1 - y) + (x + 1) * 3;
		pDibBits += offset;
		Blue = *pDibBits;
		++pDibBits;
		Green = *pDibBits;
		++pDibBits;
		Red = *pDibBits;
		break;
	case 32:
		offset = width * 4 * (height -1 - y) + (x + 1) * 4;
		pDibBits += offset;
		Blue = *pDibBits;
		++pDibBits;
		Green = *pDibBits;
		++pDibBits;
		Red = *pDibBits;
		break;
	default:
		break;
	}

	return RGB(Red, Green, Blue);
}

void CDib::SetPixel(int x, int y, COLORREF col) throw() {
	int width = GetWidth();
	int height = GetHeight();

	BYTE* pDibBits = m_pDibBits;
	int offset;

	int bpp = GetBPP();
	switch(bpp) {
	case 1:
	case 2:
	case 4:
	case 8:
	case 16:
		break; // no support for these modes... yet.
	case 24:
		offset = width * 3 * (height -1 - y) + (x + 1) * 3;
		pDibBits += offset;
		*pDibBits = GetBValue(col);
		++pDibBits;
		*pDibBits = GetGValue(col);
		++pDibBits;
		*pDibBits = GetRValue(col);
		break;
	case 32:
		offset = width * 4 * (height -1 - y) + (x + 1) * 4;
		pDibBits += offset;
		*pDibBits = GetBValue(col);
		++pDibBits;
		*pDibBits = GetGValue(col);
		++pDibBits;
		*pDibBits = GetRValue(col);
		break;
	default:
		break;
	}
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲一区二区三区四区的| 国产乱码精品一区二区三| 九色|91porny| 日本精品视频一区二区三区| 欧美精品一区二区三| 亚洲欧美日韩国产成人精品影院| 久久国产精品免费| 欧美性生活久久| 亚洲欧美在线视频| 国产精品99久久久久| 日韩写真欧美这视频| 亚洲高清中文字幕| 99精品国产99久久久久久白柏| 精品国产三级a在线观看| 午夜精品久久久久久久久久 | 久久精品国产免费看久久精品| 91在线精品一区二区| 久久精品夜夜夜夜久久| 久久99这里只有精品| 欧美精品乱码久久久久久| 国产精品久久久久一区| 国产福利一区在线| 欧美va亚洲va香蕉在线| 蜜臀av国产精品久久久久 | 91亚洲男人天堂| 中文字幕欧美激情| 国产成人精品免费一区二区| 精品国产凹凸成av人网站| 同产精品九九九| 欧美日本国产视频| 亚洲国产精品欧美一二99| 欧美做爰猛烈大尺度电影无法无天| 国产精品久久综合| 东方欧美亚洲色图在线| 久久精品人人做人人爽97| 国产美女视频一区| 国产亚洲婷婷免费| 成人在线一区二区三区| 欧美激情一区在线观看| 成人激情综合网站| 亚洲色图欧美偷拍| 色诱亚洲精品久久久久久| 一区二区三区在线观看欧美| 91丨porny丨户外露出| 一区二区三区精品久久久| 91久久精品一区二区三区| 亚洲女同ⅹxx女同tv| 91麻豆6部合集magnet| 夜夜精品浪潮av一区二区三区| 欧美探花视频资源| 久久er99精品| 亚洲欧洲色图综合| 欧美在线观看视频一区二区 | 久久精品国产秦先生| 国产日韩欧美精品电影三级在线| 大胆亚洲人体视频| 亚洲午夜视频在线观看| 91精品国产高清一区二区三区蜜臀 | 久久视频一区二区| av中文字幕不卡| 日韩精品福利网| 国产三级一区二区三区| 日韩欧美色综合| 国产原创一区二区| 亚洲欧洲国产日本综合| 69久久99精品久久久久婷婷| 狠狠色狠狠色综合| 一区二区三区欧美视频| 欧美xxxx老人做受| 色综合久久综合| 麻豆国产精品官网| 亚洲欧美日韩国产成人精品影院| 日韩欧美成人激情| 97se亚洲国产综合在线| 日韩国产高清影视| 国产精品二区一区二区aⅴ污介绍| 欧美猛男男办公室激情| 国产不卡在线视频| 免费观看日韩av| 亚洲美女视频在线| 久久久久久久免费视频了| 欧美日韩精品一区二区天天拍小说 | 91丨porny丨户外露出| 激情图片小说一区| 视频一区视频二区中文| 国产精品久久久久aaaa樱花 | 国模一区二区三区白浆| 亚洲一区二区三区在线看| 国产欧美日韩另类一区| 日韩一区二区三区免费看| 91丝袜呻吟高潮美腿白嫩在线观看| 免费看黄色91| 视频在线在亚洲| 国产成人在线视频免费播放| 日韩制服丝袜av| 一区二区三区视频在线看| 国产精品久久久久一区| 久久五月婷婷丁香社区| 欧美一区二区精品在线| 在线免费观看日本一区| 91免费国产在线| heyzo一本久久综合| 国产不卡一区视频| 国产成人综合亚洲网站| 国产一区二区三区观看| 日韩中文字幕一区二区三区| 亚洲电影视频在线| 一区二区三区视频在线看| 亚洲另类色综合网站| 国产精品久久久久久久久快鸭 | 香蕉成人啪国产精品视频综合网| 亚洲欧美一区二区三区久本道91| 国产日韩av一区| 国产精品国产三级国产aⅴ中文| 久久久久久久久久久久久女国产乱| 日韩一区二区三区视频在线| 欧美一二三区在线观看| 日韩一级在线观看| 精品美女在线播放| wwwwxxxxx欧美| 国产日韩欧美在线一区| 国产精品久久久久aaaa| 国产一区二区不卡老阿姨| 免费观看30秒视频久久| 麻豆精品国产传媒mv男同| 蜜臀久久99精品久久久画质超高清| 热久久免费视频| 久久爱另类一区二区小说| 国产一区二区三区黄视频| 成人中文字幕电影| 在线观看国产日韩| 欧美高清视频不卡网| 欧美xxxxx牲另类人与| 久久青草欧美一区二区三区| 国产精品嫩草影院av蜜臀| 亚洲日本欧美天堂| 日韩av不卡在线观看| 加勒比av一区二区| 91丨porny丨在线| 91麻豆精品国产| 久久九九99视频| 亚洲综合免费观看高清在线观看| 性欧美大战久久久久久久久| 国产美女在线精品| 色哟哟在线观看一区二区三区| 欧美久久久久久蜜桃| 亚洲精品一线二线三线| 日韩美女精品在线| 日本不卡123| 91在线国产观看| 正在播放亚洲一区| 国产精品女同一区二区三区| 午夜精品久久久久久久| 国产在线精品一区二区不卡了 | 91精品一区二区三区久久久久久 | 欧美一级黄色片| 国产精品乱码妇女bbbb| 亚洲r级在线视频| 成人性生交大片免费看视频在线| 欧美三级三级三级| 国产免费观看久久| 麻豆成人av在线| 一本色道久久综合亚洲精品按摩| 欧美大黄免费观看| 一区二区三区在线观看欧美| 国产剧情在线观看一区二区| 欧美日韩午夜在线视频| 中文字幕精品综合| 麻豆国产一区二区| 欧美日本免费一区二区三区| 亚洲欧洲成人自拍| 国产麻豆精品95视频| 欧美一级在线视频| 一二三区精品视频| 99re这里都是精品| 国产色爱av资源综合区| 久久99国产精品久久99果冻传媒| 欧美综合视频在线观看| 欧美激情在线一区二区| 国产一区二区调教| 欧美电影免费观看完整版| 午夜不卡在线视频| 日本韩国欧美一区| 亚洲桃色在线一区| www.成人在线| 中日韩av电影| 处破女av一区二区| 久久精品欧美日韩| 国产精品一区二区果冻传媒| 日韩午夜在线观看| 日韩成人av影视| 在线成人小视频| 婷婷开心激情综合| 欧洲国产伦久久久久久久| 亚洲免费观看高清在线观看| 91丝袜高跟美女视频| 日韩伦理电影网| 91麻豆123| 亚洲高清视频中文字幕| 欧美三级乱人伦电影|