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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? cdib.cpp

?? 圖像處理算法相關(guān)VC程序 VC++圖像處理程序設(shè)計(jì)配套光盤
?? CPP
字號(hào):
#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;
}

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
中文字幕成人在线观看| 欧美在线高清视频| 91丨porny丨国产| 在线视频国内一区二区| 欧美日韩黄色影视| 精品美女被调教视频大全网站| 日韩欧美国产麻豆| 欧美国产激情二区三区| 亚洲欧洲精品一区二区精品久久久| 久久亚洲一区二区三区四区| 国产精品视频一二| 一区2区3区在线看| 美女国产一区二区三区| 国产精品自拍网站| 91丨porny丨户外露出| 欧美精品久久99久久在免费线 | 欧美一级爆毛片| 久久久精品影视| 亚洲乱码精品一二三四区日韩在线| 午夜免费欧美电影| 国产剧情在线观看一区二区| 色婷婷av一区二区三区大白胸 | 亚洲色图色小说| 天天色图综合网| 国产成人av一区二区三区在线观看| jlzzjlzz欧美大全| 777午夜精品免费视频| 欧美国产精品一区| 视频一区欧美精品| 丁香六月久久综合狠狠色| 欧美日韩不卡一区二区| 久久久久久久久蜜桃| 亚洲在线视频免费观看| 国产一区二区在线影院| 欧美亚洲国产怡红院影院| 国产天堂亚洲国产碰碰| 亚洲国产人成综合网站| 国产精品456露脸| 欧美午夜精品久久久久久孕妇| 久久综合久久99| 亚洲国产视频在线| 丁香六月久久综合狠狠色| 在线一区二区观看| 欧美激情一区二区三区全黄| 天天影视色香欲综合网老头| 99久久精品99国产精品| 精品国精品国产尤物美女| 亚洲综合在线免费观看| 成人理论电影网| 欧美成人性福生活免费看| 亚洲综合小说图片| 懂色av一区二区在线播放| 91精品国产色综合久久不卡电影 | 成人涩涩免费视频| 日韩欧美国产成人一区二区| 亚洲一级在线观看| 成人丝袜18视频在线观看| 日韩欧美激情一区| 亚洲高清视频在线| 91亚洲精品久久久蜜桃| 欧美激情中文字幕一区二区| 麻豆专区一区二区三区四区五区| 欧美亚洲国产bt| 中文字幕日韩欧美一区二区三区| 韩国欧美国产1区| 在线播放一区二区三区| 亚洲精品午夜久久久| av成人动漫在线观看| 国产人成亚洲第一网站在线播放 | 成人av在线播放网址| 久久综合狠狠综合久久激情| 婷婷夜色潮精品综合在线| 欧美在线综合视频| 欧美激情一区二区三区全黄| 日韩不卡免费视频| 欧美三电影在线| 洋洋av久久久久久久一区| 色av综合在线| 亚洲一区在线观看免费| 日本大香伊一区二区三区| 亚洲人亚洲人成电影网站色| 成人av资源在线观看| 国产精品乱码久久久久久| 国产.欧美.日韩| 国产亚洲欧美日韩俺去了| 国产福利电影一区二区三区| 久久久国产午夜精品| 国产精品18久久久久久vr| ww亚洲ww在线观看国产| 另类欧美日韩国产在线| 日韩欧美在线网站| 狠狠色狠狠色综合| 欧美一级日韩一级| 久久国产精品第一页| 久久免费午夜影院| 国产成a人无v码亚洲福利| 国产亚洲精品久| 成a人片亚洲日本久久| 综合激情成人伊人| 一本一本久久a久久精品综合麻豆| 亚洲欧美福利一区二区| 在线免费av一区| 日韩av一级电影| 欧美一区二区三区喷汁尤物| 精品在线一区二区三区| 久久精品人人爽人人爽| 成人激情小说乱人伦| 亚洲男人的天堂在线观看| 欧美天堂一区二区三区| 有码一区二区三区| 91丨porny丨户外露出| 亚洲无线码一区二区三区| 欧美男人的天堂一二区| 热久久久久久久| 日本一区二区三区视频视频| 色悠悠久久综合| 天天综合色天天综合| 精品国产3级a| 成人av在线观| 亚洲第一福利视频在线| 欧美成人video| 成人av电影免费在线播放| 亚洲韩国一区二区三区| 91.com视频| 高清国产一区二区| 亚洲宅男天堂在线观看无病毒| 日韩一级黄色片| 成人av资源站| 三级亚洲高清视频| 精品久久久久99| 色综合一区二区| 久久狠狠亚洲综合| 国产精品高清亚洲| 日韩精品在线一区二区| 91国偷自产一区二区三区观看| 精品一区精品二区高清| 夜夜嗨av一区二区三区网页| 欧美激情一区二区三区四区| 制服丝袜国产精品| 91亚洲国产成人精品一区二区三 | 国产欧美精品一区aⅴ影院| 69堂成人精品免费视频| 色综合天天综合网天天狠天天| 久久国产麻豆精品| 亚洲国产美国国产综合一区二区| 欧美高清一级片在线观看| 日韩午夜精品电影| 欧美体内she精高潮| 91美女片黄在线观看91美女| 国产精品一二一区| 奇米在线7777在线精品| 一区二区三区美女| 国产精品久久99| 精品久久人人做人人爰| 制服丝袜av成人在线看| 欧美色偷偷大香| 91老师片黄在线观看| 福利一区二区在线| 精品制服美女丁香| 蜜臂av日日欢夜夜爽一区| 亚洲国产精品视频| 一区二区三区四区亚洲| 中文子幕无线码一区tr| 久久久国产综合精品女国产盗摄| 777xxx欧美| 欧美色图免费看| 91福利国产成人精品照片| 色综合色狠狠综合色| 成人一区在线观看| 国产91在线观看丝袜| 国产精品1024久久| 国产一区高清在线| 国产一区二区剧情av在线| 另类调教123区| 青草国产精品久久久久久| 亚洲国产精品久久一线不卡| 一区二区三区日韩精品视频| 伊人婷婷欧美激情| 亚洲已满18点击进入久久| 亚洲精品免费播放| 一区二区三区鲁丝不卡| 亚洲精品综合在线| 亚洲一区二区美女| 亚洲第一福利一区| 婷婷综合久久一区二区三区| 三级亚洲高清视频| 蜜臀av性久久久久蜜臀av麻豆| 免费在线观看一区二区三区| 日本一不卡视频| 久久综合综合久久综合| 精品一区二区三区久久| 国产精品影视在线观看| 成人性生交大片免费看中文 | 亚洲精品免费在线观看| 夜夜嗨av一区二区三区中文字幕| 亚洲国产中文字幕| 日本不卡免费在线视频| 久久99久久久欧美国产| 国产原创一区二区| gogogo免费视频观看亚洲一|