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

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

?? bmp.cpp

?? 打開一個bmp影像
?? CPP
?? 第 1 頁 / 共 2 頁
字號:
	{
		m_pDibBits[i] = pDibBits[i];
	}
	delete []pDibBits;


}

COLORREF BMP::ConvolutionPixel24(int i, int j, int Values[][9], int nSize, int Division, int Offset)
{
	int red = 0; int green =0; int blue =0;
	int cof=0; int size = 0;
	for(int m=0;m<nSize;m++)
	{
		for(int n=0;n<nSize;n++)
		{
			COLORREF c;
			if(GetPixel(i-nSize/2+m,j-nSize/2+n,c))
			{
				int bb =  GetBValue(c);
				int gg =  GetGValue(c);
				int rr =  GetRValue(c);
				blue  += (Values[m][n] * GetBValue(c));
				green += (Values[m][n] * GetGValue(c));
				red   += (Values[m][n] * GetRValue(c));
				cof   += Values[m][n];
				size ++;
			}
		}//end n
	}//end m
	if(cof <0)  //如果系數小于0,取原值
	{ 
		COLORREF c;
		GetPixel(i,j,c);
		blue  = GetBValue(c);
		green = GetGValue(c);
		red   = GetRValue(c);
	}
	else if(size<nSize*nSize) //如果參與卷積運算的像素數比模板小,模板系數設置為cof
	{
		if(cof == 0) cof = 1;
		blue  = min(blue/cof +Offset,255);
		green = min(green/cof +Offset,255);
		red   = min(red/cof +Offset,255);
	}
	else 
	{
		blue  = max(0,min(blue/Division + Offset,255));
		green = max(0,min(green/Division +Offset,255));
		red   = max(0,min(red/Division +Offset,255));
	}
	//返回變換的結果
   return RGB(red,green,blue);
}
void BMP::ConvertDIB24(int Values[][9], int nSize, int Division, int Offset)
{
	int Width    =  GetImageWidth();
	int Height   =  GetImageHeight();
	int ColorBits = GetImageBits();
	int WidthBytes = WIDTHBYTES(Width*ColorBits);
	//開辟與圖象同樣大小的數組,用于保存圖象結果
	unsigned char *pDibBits = new unsigned char[WidthBytes*Height];
	for(int i = 0 ;i < Height; i++)
	{
		for(int j = 0;j < Width; j++)
		{
			//計算第i行,第j列象素的新值
            COLORREF c = ConvolutionPixel24(i,j,Values,nSize,Division,Offset);
	        BYTE *pData = pDibBits + (Height-i-1)*WidthBytes+j*3;
			pData[0]    = GetBValue(c);
			pData[1]    = GetGValue(c);
			pData[2]    = GetRValue(c);
		}
	}
	//賦值
	for(i=0; i<Height*WidthBytes;i++)
	{
		m_pDibBits[i] = pDibBits[i];
	}
	delete []pDibBits;
}

void BMP::DeleteContents()
{
	if(m_pDib != NULL)
		delete []m_pDib;
	m_nHeight    = 0;
	m_nWidth     = 0;
	m_nFileSize  = 0;
	m_nScanWidth = 0;
	m_nColorBits = 0;
	m_pDib       = NULL;
	m_pDibBits   = NULL;

}

void BMP::UserDefinedFilter(int Values[][9], int TempSize, int Division, int Offset)
{
   if(m_pDibBits == NULL)
	{
		AfxMessageBox("Can't Get Image Data,Please reload the image again!",0,0);
		return ;
	}
	if(GetImageBits() == 8)
	{
		ConvertDIB8(Values,TempSize,Division,Offset);
	}
	else if(GetImageBits() == 24)
	{
		ConvertDIB24(Values,TempSize,Division,Offset);
	}
}

BOOL BMP::LoadImageNew(CString FileName)
{
    /**************
    BITMAPFILEHEADER          |  (14 byte)
	------------------------
  + BITMAPINFOHEADER (40 byte)|
  + Palette          (4  byte)|  BITMAPINFO(44 byte)
	***************/

	int test1 =sizeof(BITMAPINFOHEADER);
	int test2 = sizeof(BITMAPFILEHEADER);
	int test3 = sizeof(LOGPALETTE);
	int test4 = sizeof(PALETTEENTRY);
	int test5 = sizeof(RGBQUAD);
	int test7 = sizeof(LOGPALETTE);
    int test8 = sizeof(BITMAPINFO);
	/******************/
	
	m_sFilePath = FileName;
	CFile file(m_sFilePath,CFile::modeRead);
	m_sFilePath = file.GetFilePath();
	m_sFileName = file.GetFileName();
	m_sFilePath = m_sFilePath.Left(m_sFilePath.GetLength()-m_sFileName.GetLength());
	file.Close();
    
    //創建文件句柄
	HANDLE hFile = ::CreateFile(FileName,GENERIC_READ,FILE_SHARE_READ,NULL,
		                 OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL);
    ASSERT(hFile != INVALID_HANDLE_VALUE);
	
	//獲取文件大小
	m_nFileSize = GetFileSize(hFile,NULL);
	m_pDib = new unsigned char[m_nFileSize];
	ASSERT(m_pDib != NULL);

   	HANDLE	hMap= ::CreateFileMapping(hFile,NULL,PAGE_READONLY,0,0,NULL); 
	
	if (hMap != NULL && GetLastError() == ERROR_ALREADY_EXISTS) 
	{
		CloseHandle(hMap); 
        hMap = NULL;
		return  FALSE;
	}

	//讀圖像
	unsigned long WriteNum;
	ReadFile(hFile,m_pDib,m_nFileSize,&WriteNum,NULL);
	ASSERT(m_nFileSize == (long)WriteNum);
	CloseHandle(hFile);

    //獲取文件頭和文件信息頭
	//(1)指針指向文件的頭
	unsigned char *pDib = (unsigned char *)m_pDib;  
	BITMAPFILEHEADER *pFileHeader = (BITMAPFILEHEADER * )pDib;
	if(pFileHeader->bfType != 'MB')
	{
		AfxMessageBox("文件類型有誤,無法打開,請重新選擇");
		return FALSE;
	}
	//(2)指向BITMAPFILEHEADER的末尾
	pDib += sizeof(BITMAPFILEHEADER);

	BITMAPINFOHEADER *pInfoHeader = (BITMAPINFOHEADER * )pDib;
	
	//初始化成員數據
    m_nHeight    = pInfoHeader->biHeight;
	m_nWidth     = pInfoHeader->biWidth ;
	m_nScanWidth = WIDTHBYTES(m_nWidth*pInfoHeader->biBitCount);
	m_nColorBits = pInfoHeader->biBitCount;
	//(3)指向BITMAPINFOHEADER的末尾
	pDib        += sizeof(BITMAPINFOHEADER);
	int ColorNumber = 1<<m_nColorBits;           //圖像的顏色數圖像的顏色數pow(2,m_nColorBits)
	RGBQUAD *pPaletteInfo = (RGBQUAD*)pDib;
	if( m_Palette.GetSafeHandle() != NULL )     //刪除現有的調色板信息
		m_Palette.DeleteObject();

	if( m_nColorBits == 24 )                        //真彩色圖像,無調色板
	{
		m_pDibBits = pDib;
		return TRUE;                     //退出函數,不執行席面的操作
	} 
	//否則設置調色板(對于8位)

	LOGPALETTE *pLogPal = (LOGPALETTE *) new char[sizeof(LOGPALETTE)+
		ColorNumber * sizeof(PALETTEENTRY)];
	if( pLogPal != NULL )
	{
		pLogPal->palVersion    = 0x300;
		pLogPal->palNumEntries = ColorNumber;
		for( int i = 0; i < ColorNumber; i++ )
		{
			pLogPal->palPalEntry[i].peRed   = pPaletteInfo[i].rgbRed;					
			pLogPal->palPalEntry[i].peGreen = pPaletteInfo[i].rgbGreen;					
			pLogPal->palPalEntry[i].peBlue  = pPaletteInfo[i].rgbBlue;

			//初始化調色板數組
			m_nPalette[i][0] = pPaletteInfo[i].rgbBlue;
			m_nPalette[i][1] = pPaletteInfo[i].rgbGreen;
			m_nPalette[i][2] = pPaletteInfo[i].rgbRed;
		}
		m_Palette.CreatePalette( pLogPal );
		delete [] pLogPal;
	}
	//(4)指向位圖數據(Palette的末尾)
	
	m_pDibBits = pDib + ColorNumber * sizeof(RGBQUAD);


    /**************
      m_pDib--> BITMAPFILEHEADER
				----------------------
                BITMAPINFOHEADER
                Palette
				------------------------
  m_pDibBits--> Data

	***************/

	return TRUE;
}

/*WriteFile(hDestFile,&bmfDest,sizeof(BITMAPFILEHEADER),&dwWrite,NULL);	
	WriteFile(hDestFile,&bmiDest,sizeof(BITMAPINFOHEADER),&dwWrite,NULL);

	RGBQUAD* bmiColor = new RGBQUAD[256];
	if(bmiColor==NULL)
		return FALSE;
	for(int k=0;k<256;k++)
	{
		bmiColor[k].rgbBlue = k;
		bmiColor[k].rgbGreen = k;
		bmiColor[k].rgbRed = k;
		bmiColor[k].rgbReserved = 0;
	}
	//write palette
	WriteFile(hDestFile,bmiColor,1024,&dwWrite,NULL); */

BOOL BMP::CreateBmp(int nWidth,int nHeight,int nCount,CString CPath)
{

	//設置合成圖象的文件信息頭
	unsigned long WriteNum;
    BITMAPFILEHEADER BFH;
	BITMAPINFOHEADER BIH;
	int WidthBytes;
	if( nCount == 8)
		WidthBytes= WIDTHBYTES(nWidth*8);
	if(nCount ==24)
		WidthBytes = WIDTHBYTES(nWidth*24); 
	BFH.bfType      = 'MB';
	BFH.bfSize      = sizeof(BITMAPFILEHEADER) + sizeof(BITMAPINFOHEADER) 
		+ WidthBytes * nHeight;
	BFH.bfOffBits   = sizeof(BITMAPFILEHEADER) + sizeof(BITMAPINFOHEADER);
	BFH.bfReserved1 = BFH.bfReserved2 = 0;
	//圖象信息頭
	BIH.biSize          = sizeof(BITMAPINFOHEADER);//40 ;
	BIH.biWidth         = nWidth ;
	BIH.biHeight        = nHeight;
	BIH.biPlanes        = 1;
	BIH.biBitCount      = nCount;
	BIH.biCompression   = 0;
	BIH.biSizeImage     = WidthBytes * nHeight;
	BIH.biXPelsPerMeter = 0;
	BIH.biYPelsPerMeter = 0;
	BIH.biClrUsed       = 0;
	BIH.biClrImportant  = 0;
	
	//創建文件
	HANDLE hNewFile = ::CreateFile(CPath,GENERIC_WRITE,FILE_SHARE_WRITE,NULL,
		CREATE_ALWAYS,FILE_ATTRIBUTE_NORMAL,NULL);
	if(hNewFile == NULL)
	{
		AfxMessageBox("Could not create file.",0,0);
		CloseHandle(hNewFile);
		return FALSE;
	}
	
	//寫入文件信息頭
	WriteFile(hNewFile, &BFH, sizeof(BITMAPFILEHEADER), &WriteNum, NULL);
	WriteFile(hNewFile, &BIH, sizeof(BITMAPINFOHEADER), &WriteNum, NULL);
    
	unsigned char *pDibBits;
	if( nCount == 24)
	{
        pDibBits = new unsigned char[BIH.biHeight * WidthBytes];
		/******************/
		//寫象素
		memset(pDibBits,255,BIH.biHeight * WidthBytes);
		/******************/
		
		//寫入文件
		WriteFile(hNewFile, pDibBits, WidthBytes*BIH.biHeight, &WriteNum, NULL);
		ASSERT(WriteNum = WidthBytes * BIH.biHeight);
		CloseHandle(hNewFile);
		delete pDibBits;
		return TRUE;
	}


	///////////////////對于灰度影像	
	RGBQUAD* bmiColor = new RGBQUAD[256];
	if(bmiColor==NULL)
		return FALSE;
	for(int k=0;k<256;k++)
	{
		bmiColor[k].rgbBlue = k;
		bmiColor[k].rgbGreen = k;
		bmiColor[k].rgbRed = k;
		bmiColor[k].rgbReserved = 0;
	}
	//write palette
	WriteFile(hNewFile,bmiColor,1024,&WriteNum,NULL);
	
	
	pDibBits = new unsigned char[BIH.biHeight * WidthBytes];
	/******************/
	//寫象素
	memset(pDibBits,255,BIH.biHeight * WidthBytes);
	/******************/
	
	//寫入文件
	WriteFile(hNewFile, pDibBits, WidthBytes*BIH.biHeight, &WriteNum, NULL);
	ASSERT(WriteNum = WidthBytes * BIH.biHeight);
	CloseHandle(hNewFile);
	delete pDibBits;
    return TRUE;

}


BOOL BMP::LinerTrans(LPSTR lpDIBBits, LONG lWidth, LONG lHeight, FLOAT fA, FLOAT fB)
{
  	unsigned char*	lpSrc;
	LONG	i;
	LONG	j;
   	LONG	lLineBytes;
  	FLOAT	fTemp;
    lLineBytes = WIDTHBYTES(lWidth * 8);
    for(i = 0; i < lHeight; i++)
	{
		for(j = 0; j < lWidth; j++)
		{
			lpSrc = (unsigned char*)lpDIBBits + lLineBytes * (lHeight - 1 - i) + j;
			
		
			fTemp = fA * (*lpSrc) + fB;
			
			
			if (fTemp > 255)
			{
				
				*lpSrc = 255;
			}
			else if (fTemp < 0)
			{
				
				*lpSrc = 0;
			}
			else
			{
			
				*lpSrc = (unsigned char) (fTemp + 0.5);
			}
		}
	}
	
	
	return TRUE;
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
首页综合国产亚洲丝袜| 亚洲日本在线观看| 日韩西西人体444www| 欧美一区二区三区在线观看视频| 欧美午夜精品一区二区蜜桃| 欧美三级中文字幕在线观看| 欧美日韩免费观看一区三区| 欧美久久久久免费| 久久久噜噜噜久久人人看| 国产精品国产三级国产a| 亚洲国产精品久久艾草纯爱| 久久se这里有精品| 成人黄色免费短视频| 欧洲亚洲国产日韩| 久久综合九色欧美综合狠狠| 国产精品久久夜| 久久精品国产亚洲a| 91网站在线观看视频| 2021国产精品久久精品| 亚洲精品欧美综合四区| 激情五月播播久久久精品| 99re这里只有精品首页| 久久久久久久久久电影| 亚洲成人自拍偷拍| 9色porny自拍视频一区二区| 日韩欧美三级在线| 日韩电影在线免费看| 亚洲欧洲一区二区在线播放| 日本视频在线一区| 欧美亚洲一区二区在线观看| 国产精品第13页| 成人av电影免费在线播放| 欧美精品一区二区三区在线| 全部av―极品视觉盛宴亚洲| 91亚洲精品久久久蜜桃网站 | 欧美亚洲动漫精品| 亚洲视频1区2区| 91色婷婷久久久久合中文| 自拍偷拍欧美精品| 欧美视频在线播放| 开心九九激情九九欧美日韩精美视频电影| 欧洲精品视频在线观看| 婷婷成人激情在线网| 欧美一级高清大全免费观看| 另类综合日韩欧美亚洲| 久久久亚洲精品石原莉奈| 菠萝蜜视频在线观看一区| 亚洲激情一二三区| 日韩一区二区麻豆国产| 成人久久视频在线观看| 亚洲精品国产无天堂网2021| 69久久99精品久久久久婷婷| 国内精品国产成人国产三级粉色 | 韩国v欧美v日本v亚洲v| 中文一区二区完整视频在线观看| 99久久精品费精品国产一区二区| 亚洲三级理论片| 欧美大片在线观看一区| 91亚洲男人天堂| 国产九九视频一区二区三区| 国产白丝精品91爽爽久久| 欧美日韩日本视频| 国产成人a级片| 亚洲电影激情视频网站| 久久久午夜精品理论片中文字幕| 91农村精品一区二区在线| 精品一区二区在线看| 亚洲精品综合在线| 亚洲国产成人在线| 国产欧美日韩麻豆91| 日韩欧美区一区二| 日韩一区二区三区电影在线观看 | 国产mv日韩mv欧美| 紧缚奴在线一区二区三区| 石原莉奈在线亚洲二区| 一区二区三区在线观看国产 | av在线不卡电影| 国产99久久久国产精品| 国产91综合网| 国产成人av影院| 成人免费黄色在线| 成人免费福利片| 色美美综合视频| 91久久香蕉国产日韩欧美9色| 成人小视频免费在线观看| 国产成人a级片| 欧美视频一区二区在线观看| 91视频在线看| 欧美精品粉嫩高潮一区二区| 欧美人妖巨大在线| 精品欧美久久久| 中文字幕第一区综合| 亚洲乱码中文字幕| 亚洲综合丝袜美腿| 麻豆国产一区二区| 波多野洁衣一区| 色婷婷国产精品久久包臀| 7777精品伊人久久久大香线蕉经典版下载 | 国产成人在线观看| 99天天综合性| 26uuu色噜噜精品一区二区| 国产精品国产三级国产普通话三级| 亚洲免费在线视频一区 二区| 日韩精彩视频在线观看| 成人免费视频免费观看| 欧美丰满美乳xxx高潮www| 中文字幕乱码日本亚洲一区二区| 亚洲精品久久久久久国产精华液| 国产在线精品免费av| 日本福利一区二区| 国产精品入口麻豆原神| 亚洲成a人片综合在线| 99国产精品久久| 久久精品亚洲精品国产欧美 | 国产亚洲一区二区三区| 日韩高清在线一区| 在线一区二区观看| 《视频一区视频二区| 成人午夜激情在线| 2023国产精品| 精品中文av资源站在线观看| 欧美精品久久天天躁| 日韩国产欧美在线播放| 欧美三级三级三级| 日本亚洲天堂网| 欧美一级理论片| 韩国一区二区视频| 欧美v亚洲v综合ⅴ国产v| 五月天一区二区| 欧美mv日韩mv国产网站| 激情综合五月天| 欧美国产一区二区在线观看| 国产精品一区专区| 最新成人av在线| 欧美美女网站色| 高清av一区二区| 亚洲日本va午夜在线影院| 在线视频欧美精品| 日本成人在线一区| 国产精品色哟哟网站| 91国内精品野花午夜精品| 日精品一区二区| 国产精品乱码久久久久久| 色综合久久久久久久久久久| 中文字幕在线免费不卡| 欧美色区777第一页| 国产综合久久久久久鬼色| 国产精品全国免费观看高清| 91福利社在线观看| 国产精品一区不卡| 日韩二区在线观看| 1024国产精品| 精品国产乱码久久久久久老虎| 国产精一区二区三区| 性欧美大战久久久久久久久| 国产精品亲子乱子伦xxxx裸| 欧美一区2区视频在线观看| 一本久久精品一区二区| 国产91综合网| 高潮精品一区videoshd| 精品亚洲国产成人av制服丝袜| 国产精品久久久久影院色老大| 7777精品伊人久久久大香线蕉 | 欧美日韩高清一区| 色网综合在线观看| a在线播放不卡| 亚洲成av人**亚洲成av**| 亚洲欧美一区二区三区极速播放| 国产香蕉久久精品综合网| 欧美电影免费观看高清完整版| 欧美日韩一区二区三区四区五区| 在线精品视频一区二区| 一本色道久久加勒比精品| 在线观看国产精品网站| 色综合网色综合| 91成人国产精品| 欧美日韩一区久久| 在线播放国产精品二区一二区四区| 欧美体内she精高潮| 欧美区视频在线观看| 欧美一卡二卡三卡| 久久久久9999亚洲精品| 国产精品无码永久免费888| 自拍视频在线观看一区二区| 亚洲免费观看视频| 另类的小说在线视频另类成人小视频在线 | 99精品偷自拍| 91麻豆精品国产91久久久久 | 美女视频第一区二区三区免费观看网站 | 免费国产亚洲视频| av在线免费不卡| 精品久久免费看| 一区二区不卡在线视频 午夜欧美不卡在| 亚洲五月六月丁香激情| 国内久久婷婷综合| 在线观看三级视频欧美| 国产亚洲精品资源在线26u| 午夜久久久久久| 欧美在线色视频| 日韩久久一区二区|