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

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

?? cdib.cpp

?? VC++圖像處理程序設計課本和代碼.
?? CPP
字號:
#include "stdafx.h"
#include "cdib.h"
#include "windowsx.h"
#include "math.h"
#define WIDTHBYTES(bits)    (((bits) + 31) / 32 * 4) 

CDib::CDib()
{
//	LoadFile();
}

CDib::~CDib()
{
    GlobalFreePtr(m_pBitmapInfo);
}

void CDib::LoadFile(const char* dibFileName)
{
	strcpy(m_fileName,dibFileName);
    CFile dibFile(m_fileName, CFile::modeRead);
    
    dibFile.Read((void*)&bitmapFileHeader,sizeof(BITMAPFILEHEADER));

    if (bitmapFileHeader.bfType == 0x4d42)
    {
        DWORD fileLength = dibFile.GetLength();    
        DWORD size = fileLength -
			sizeof(BITMAPFILEHEADER);
        BYTE* pDib =
            (BYTE*)GlobalAllocPtr(GMEM_MOVEABLE, size);
        dibFile.Read((void*)pDib, size);
        dibFile.Close();

        m_pBitmapInfo = (BITMAPINFO*) pDib;
        m_pBitmapInfoHeader = (BITMAPINFOHEADER*) pDib;
        m_pRGB = (RGBQUAD*)(pDib +
			m_pBitmapInfoHeader->biSize);
        int m_numberOfColors = GetNumberOfColors();
        if (m_pBitmapInfoHeader->biClrUsed == 0)
            m_pBitmapInfoHeader->biClrUsed =
			    m_numberOfColors;
        DWORD colorTableSize = m_numberOfColors *
            sizeof(RGBQUAD);
        m_pData = pDib + m_pBitmapInfoHeader->biSize
            + colorTableSize;
		if (m_pRGB == (RGBQUAD*)m_pData) // No color table
			m_pRGB = NULL;
        m_pBitmapInfoHeader->biSizeImage = GetSize();
		m_valid = TRUE;
    }    
    else
    {
        m_valid = FALSE;
        AfxMessageBox("This isn't a bitmap file!");
    }
}

BOOL CDib::IsValid()
{
    return m_valid;
}
        
char* CDib::GetFileName()
{
    return m_fileName;
}
        
UINT CDib::GetWidth()
{
    return (UINT) m_pBitmapInfoHeader->biWidth;
}
        
UINT CDib::GetHeight()
{
    return (UINT) m_pBitmapInfoHeader->biHeight;
}
        
DWORD CDib::GetSize()
{
    if (m_pBitmapInfoHeader->biSizeImage != 0)
        return m_pBitmapInfoHeader->biSizeImage;
	else
    {
        DWORD height = (DWORD) GetHeight();
        DWORD width = (DWORD) GetWidth();
        return height * width;
    }
}

UINT CDib::GetNumberOfColors()
{
	int numberOfColors;

    if ((m_pBitmapInfoHeader->biClrUsed == 0) &&
          (m_pBitmapInfoHeader->biBitCount < 9))
	{
		switch (m_pBitmapInfoHeader->biBitCount)
		{
		    case 1: numberOfColors = 2; break;
		    case 4: numberOfColors = 16; break;
		    case 8: numberOfColors = 256;
		}
	}
    else
		numberOfColors = (int) m_pBitmapInfoHeader->biClrUsed;

    return numberOfColors;
}
    
BYTE* CDib::GetData()
{
    return m_pData;
}

RGBQUAD* CDib::GetRGB()
{
    return m_pRGB;
}

BITMAPINFO* CDib::GetInfo()
{
    return m_pBitmapInfo;
}

WORD CDib::PaletteSize(LPBYTE lpDIB) 
{ 
    return (DIBNumColors(lpDIB) * sizeof(RGBTRIPLE)); 
} 

WORD CDib::DIBNumColors(LPBYTE lpDIB) 
{ 
    WORD wBitCount;  // DIB bit count 
    wBitCount = ((LPBITMAPCOREHEADER)lpDIB)->bcBitCount; 
    switch (wBitCount) 
    { 
        case 1: 
            return 2; 
        case 4: 
            return 16; 
        case 8: 
            return 256; 
        default: 
            return 0; 
    } 
} 

void CDib::SaveFile(const CString filename)
{
    BITMAPFILEHEADER    bmfHdr;     // Header for Bitmap file 
    LPBITMAPINFOHEADER  lpBI;       // Pointer to DIB info structure 
    DWORD               dwDIBSize; 
 
    bmfHdr.bfType = 0x4d42;  // "BM" 
    lpBI = (LPBITMAPINFOHEADER)m_pBitmapInfoHeader; 
    dwDIBSize = *(LPDWORD)lpBI + PaletteSize((LPBYTE)lpBI);   
    if ((lpBI->biCompression == BI_RLE8) || (lpBI->biCompression == BI_RLE4)) 
        dwDIBSize += lpBI->biSizeImage; 
    else 
    { 
        DWORD dwBmBitsSize;  // Size of Bitmap Bits only 
        dwBmBitsSize = WIDTHBYTES((lpBI->biWidth)*((DWORD)lpBI->biBitCount)) * 
                lpBI->biHeight; 
        dwDIBSize += dwBmBitsSize; 
        lpBI->biSizeImage = dwBmBitsSize; 
    } 
    bmfHdr.bfSize = dwDIBSize + sizeof(BITMAPFILEHEADER); 
    bmfHdr.bfReserved1 = 0; 
    bmfHdr.bfReserved2 = 0; 
    bmfHdr.bfOffBits = (DWORD)sizeof(BITMAPFILEHEADER) + lpBI->biSize + 
            PaletteSize((LPBYTE)lpBI); 
 
	CFile dibFile(filename, CFile::modeWrite|CFile::modeCreate);
	dibFile.Write(&bmfHdr, sizeof(BITMAPFILEHEADER));
	dibFile.WriteHuge(lpBI, dwDIBSize);
	dibFile.Close();
/*
bitmapFileHeader.bfSize=GetSize()+sizeof(BITMAPFILEHEADER)+sizeof(BITMAPINFO);
bitmapFileHeader.bfType = 0x4d42;
bitmapFileHeader.bfOffBits = sizeof(BITMAPFILEHEADER)+sizeof(BITMAPINFO);
bitmapFileHeader.bfReserved1 = 0;
bitmapFileHeader.bfReserved2 = 0;
CFile dibFile(filename, CFile::modeWrite|CFile::modeCreate);
dibFile.Write(&bitmapFileHeader,sizeof(BITMAPFILEHEADER));
dibFile.Write(m_pBitmapInfo,sizeof(BITMAPINFO));
dibFile.WriteHuge(m_pData,GetSize());
dibFile.Close();
}
//////////////////////////////////////////////////////////////////
    BITMAPFILEHEADER bmfh;
	bmfh.bfType = 0x4d42;  // 'BM'
	int sizeHdr = sizeof(BITMAPINFOHEADER) + sizeof(RGBQUAD) * m_nColorEntries;
	bmfh.bfSize = 0;
	bmfh.bfReserved1 = bmfh.bfReserved2 = 0;
	bmfh.bfOffBits = sizeof(BITMAPFILEHEADER) + sizeof(BITMAPINFOHEADER) +
			sizeof(RGBQUAD) * m_nColorEntries;	
	try {
		pFile->Write((LPVOID) &bmfh, sizeof(BITMAPFILEHEADER));
		pFile->Write((LPVOID) m_lpBMPHdr,  sizeHdr);
		pFile->Write((LPVOID) m_lpDIBits, m_dwImageSize);
	}
	catch(CException* pe) {
		pe->Delete();
		AfxMessageBox("write error");
		return FALSE;
	}
	return TRUE;
	}
	/////////////////////////////////////////////////
	WaitCursorBegin();

    BITMAPFILEHEADER    bmfHdr;     // Header for Bitmap file 
    LPBITMAPINFOHEADER  lpBI;       // Pointer to DIB info structure 
    DWORD               dwDIBSize; 

	// Get a pointer to the DIB memory, the first of which contains 
    // a BITMAPINFO structure 
    lpBI = (LPBITMAPINFOHEADER)GlobalLock(m_hDib); 
    if (!lpBI) 
	{
		GlobalUnlock(m_hDib);
		WaitCursorEnd();
        return FALSE; 
	}
 
    // Check to see if we're dealing with an OS/2 DIB.  If so, don't 
    // save it because our functions aren't written to deal with these 
    // DIBs. 
    if (lpBI->biSize != sizeof(BITMAPINFOHEADER)) 
    { 
        GlobalUnlock(m_hDib); 
		WaitCursorEnd();
        return FALSE; 
    } 
 
    // Fill in the fields of the file header 
 
    // Fill in file type (first 2 bytes must be "BM" for a bitmap) 
 
    bmfHdr.bfType = DIB_HEADER_MARKER;  // "BM" 
 
    // Calculating the size of the DIB is a bit tricky (if we want to 
    // do it right).  The easiest way to do this is to call GlobalSize() 
    // on our global handle, but since the size of our global memory may have 
    // been padded a few bytes, we may end up writing out a few too 
    // many bytes to the file (which may cause problems with some apps, 
    // like HC 3.0). 
    // 
    // So, instead let's calculate the size manually. 
    // 
    // To do this, find size of header plus size of color table.  Since the 
    // first DWORD in both BITMAPINFOHEADER and BITMAPCOREHEADER conains 
    // the size of the structure, let's use this. 
 
    // Partial Calculation 
 
    dwDIBSize = *(LPDWORD)lpBI + PaletteSize((LPBYTE)lpBI);   
 
    // Now calculate the size of the image 
 
    // It's an RLE bitmap, we can't calculate size, so trust the biSizeImage 
    // field 
 
    if ((lpBI->biCompression == BI_RLE8) || (lpBI->biCompression == BI_RLE4)) 
        dwDIBSize += lpBI->biSizeImage; 
    else 
    { 
        DWORD dwBmBitsSize;  // Size of Bitmap Bits only 
 
        // It's not RLE, so size is Width (DWORD aligned) * Height 
 
        dwBmBitsSize = WIDTHBYTES((lpBI->biWidth)*((DWORD)lpBI->biBitCount)) * 
                lpBI->biHeight; 
 
        dwDIBSize += dwBmBitsSize; 
 
        // Now, since we have calculated the correct size, why don't we 
        // fill in the biSizeImage field (this will fix any .BMP files which  
        // have this field incorrect). 
 
        lpBI->biSizeImage = dwBmBitsSize; 
    } 
 
 
    // Calculate the file size by adding the DIB size to sizeof(BITMAPFILEHEADER) 
                    
    bmfHdr.bfSize = dwDIBSize + sizeof(BITMAPFILEHEADER); 
    bmfHdr.bfReserved1 = 0; 
    bmfHdr.bfReserved2 = 0; 
 
    // Now, calculate the offset the actual bitmap bits will be in 
    // the file -- It's the Bitmap file header plus the DIB header, 
    // plus the size of the color table. 
     
    bmfHdr.bfOffBits = (DWORD)sizeof(BITMAPFILEHEADER) + lpBI->biSize + 
            PaletteSize((LPBYTE)lpBI); 
 
 	TRY
	{
	    // Write the file header 
		pFile->Write(&bmfHdr, sizeof(BITMAPFILEHEADER));
		// write DIB buffer
		pFile->WriteHuge(lpBI, dwDIBSize);
	}
	CATCH (CException, e)
	{
        GlobalUnlock(m_hDib); 
		WaitCursorEnd();
		return FALSE;
	}
	END_CATCH

	GlobalUnlock(m_hDib); 
	WaitCursorEnd();
	
	return TRUE;
*/
}

DWORD CDib::GetDibWidthBytes()
{
	byBitCount=m_pBitmapInfoHeader->biBitCount;
	LONG nWidth=m_pBitmapInfoHeader->biWidth;

	dwWidthBytes = (DWORD)m_pBitmapInfoHeader->biWidth;	//8-bits
	if(byBitCount == 1) dwWidthBytes = (nWidth + 7) / 8;
	else if(byBitCount == 4) dwWidthBytes = (nWidth + 1) / 2;
	else if(byBitCount == 24) dwWidthBytes = 3 * nWidth ;
	
	while((dwWidthBytes & 3) != 0)dwWidthBytes++;

	return dwWidthBytes;
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
www.在线欧美| 久久精品亚洲精品国产欧美 | 亚洲国产视频一区二区| 美女视频一区二区三区| 一本大道久久a久久综合| xnxx国产精品| 丝袜亚洲另类欧美| 91久久久免费一区二区| 国产三级一区二区| 青青草精品视频| 欧美日韩极品在线观看一区| 最近日韩中文字幕| 国产成人在线视频免费播放| 日韩久久久精品| 五月天视频一区| 欧美这里有精品| 一区二区三区在线视频免费| voyeur盗摄精品| 欧美经典三级视频一区二区三区| 久久99精品久久久久婷婷| 在线电影国产精品| 亚洲永久免费av| 91福利区一区二区三区| 亚洲女人的天堂| 色婷婷综合久久久久中文一区二区| 国产欧美一区二区精品忘忧草| 黄色成人免费在线| 欧美岛国在线观看| 久久69国产一区二区蜜臀| 91精品国产福利| 日本视频一区二区| 欧美成人女星排名| 久久97超碰色| 国产日韩欧美综合在线| 成人自拍视频在线| 1024精品合集| 色激情天天射综合网| 亚洲大片精品永久免费| 欧美日韩和欧美的一区二区| 亚洲va国产天堂va久久en| 欧美卡1卡2卡| 免费看日韩a级影片| 精品国产一区二区三区av性色 | 精品久久久久久久久久久久久久久| 日本欧美一区二区| 久久久综合九色合综国产精品| 欧美老女人在线| 久久成人久久爱| 国产欧美一区二区精品久导航| 波多野结衣中文字幕一区二区三区 | 国产精品久久久久久福利一牛影视| 成人丝袜视频网| 亚洲精品欧美激情| 欧美丰满一区二区免费视频| 精品一区二区av| 中文字幕中文乱码欧美一区二区 | 亚洲国产一区二区在线播放| 欧美一级理论片| 高清国产一区二区| 亚洲色图一区二区| 日韩欧美一级在线播放| 国产精品一区二区久激情瑜伽| 1024成人网| 日韩一级成人av| 成人高清在线视频| 午夜成人免费视频| 久久精品人人做人人综合| 一本色道久久加勒比精品| 麻豆91精品91久久久的内涵| 综合欧美亚洲日本| 精品国产1区二区| 欧美极品少妇xxxxⅹ高跟鞋| 欧美剧在线免费观看网站| 国产99久久精品| 日韩电影网1区2区| 亚洲欧美偷拍另类a∨色屁股| 欧美一区二区视频网站| 91丨porny丨户外露出| 蜜桃久久久久久| 一区二区三区精品在线观看| 国产午夜精品久久久久久免费视 | 五月激情综合婷婷| 成人免费一区二区三区在线观看| 91精品免费在线观看| www.久久精品| 久久97超碰国产精品超碰| 亚洲成av人片在线| 亚洲精品高清在线| 国产精品青草久久| 久久久亚洲高清| 日韩欧美第一区| 欧美日韩免费电影| 日本韩国欧美国产| aaa亚洲精品| 国产一区999| 免费精品视频在线| 视频一区欧美精品| 亚洲va国产va欧美va观看| 专区另类欧美日韩| 国产精品美女一区二区在线观看| 日韩视频在线永久播放| 欧美蜜桃一区二区三区| 91毛片在线观看| 97超碰欧美中文字幕| 成人动漫av在线| 欧美一区欧美二区| 91精品国产综合久久精品app | 亚洲成人av在线电影| 亚洲精选一二三| 亚洲精品免费在线播放| 亚洲精品久久嫩草网站秘色| 亚洲欧美国产三级| 亚洲免费视频中文字幕| 亚洲免费三区一区二区| 亚洲欧美在线aaa| 国产精品久久久久久久久免费樱桃| www一区二区| 欧美精彩视频一区二区三区| 欧美激情中文字幕一区二区| 国产欧美日韩在线观看| 欧美韩国日本综合| 亚洲视频在线观看三级| 一区二区三区在线播放| 国产精品二区一区二区aⅴ污介绍| 综合亚洲深深色噜噜狠狠网站| 亚洲欧美成aⅴ人在线观看| 亚洲五码中文字幕| 蜜桃av噜噜一区二区三区小说| 蜜桃免费网站一区二区三区| 激情偷乱视频一区二区三区| 成人做爰69片免费看网站| 国产精品毛片久久久久久| 久久久99精品免费观看不卡| 中文久久乱码一区二区| 亚洲精品国久久99热| 91丨九色丨蝌蚪富婆spa| 欧美体内she精视频| 日韩午夜电影在线观看| 国产视频一区不卡| 亚洲一区在线视频| 久久99久久99小草精品免视看| 成人午夜视频在线| 欧美无砖专区一中文字| 精品国产一区二区亚洲人成毛片| 国产精品久久久久桃色tv| 亚洲一区日韩精品中文字幕| 久久精品国产第一区二区三区| 国产91精品露脸国语对白| 欧美婷婷六月丁香综合色| 欧美精品一区二区在线播放| 亚洲视频中文字幕| 精品亚洲aⅴ乱码一区二区三区| 成人av在线资源网站| 欧美精品国产精品| 国产精品视频一二三| 日韩av电影天堂| 暴力调教一区二区三区| 欧美一区二区三级| 国产精品国产三级国产aⅴ无密码| 天天影视网天天综合色在线播放| 国产91精品一区二区| 678五月天丁香亚洲综合网| 国产精品福利一区| 激情图区综合网| 欧美日韩aaaaa| 亚洲伦理在线免费看| 国产精品一级在线| 91麻豆精品91久久久久同性| 亚洲欧美经典视频| 成人影视亚洲图片在线| 欧美一区二区播放| 夜夜操天天操亚洲| 成人精品视频一区二区三区尤物| 777奇米四色成人影色区| 亚洲免费观看高清完整版在线观看| 国产精品123区| 日韩午夜激情免费电影| 日日夜夜精品视频免费| 一本一本大道香蕉久在线精品 | 国产亚洲1区2区3区| 日产国产欧美视频一区精品| 91国模大尺度私拍在线视频 | 久久久久久久综合日本| 琪琪久久久久日韩精品| 欧美日韩精品一二三区| 亚洲美女区一区| 99麻豆久久久国产精品免费| 久久精品视频一区二区| 精品亚洲国内自在自线福利| 日韩午夜精品视频| 六月丁香婷婷色狠狠久久| 91精品国产一区二区三区蜜臀| 亚洲综合另类小说| 欧美性一二三区| 亚洲一区二区三区不卡国产欧美| 在线观看国产91| 亚洲国产精品嫩草影院| 欧美男生操女生| 老司机午夜精品| 久久久精品免费观看|