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

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

?? dib.cpp

?? 關于圖像水印,VC++語言運行程序,可以正常正常運行.希望有所幫助.
?? CPP
字號:
// Dib.cpp : implementation file
//

#include "stdafx.h"
#include "圖像水印.h"
#include "Dib.h"

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

/////////////////////////////////////////////////////////////////////////////
// CDib

//IMPLEMENT_DYNCREATE(CDib, CView)

CDib::CDib()
{
	m_pDib = NULL;
	m_pWordData = NULL;
	m_pFile = NULL;
	m_pOldDibShow = NULL;

}

CDib::~CDib()
{
	if( m_pDib != NULL )
		delete [] m_pDib;
	if( m_pWordData != NULL )
		delete [] m_pWordData;
	if (m_pFile != NULL)
		delete [] m_pFile;
	if (m_pOldDibShow != NULL)
		delete [] m_pOldDibShow;
}


BEGIN_MESSAGE_MAP(CDib, CView)
	//{{AFX_MSG_MAP(CDib)
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CDib drawing

void CDib::OnDraw(CDC* pDC)
{
	CDocument* pDoc = GetDocument();
	// TODO: add draw code here
}

/////////////////////////////////////////////////////////////////////////////
// CDib diagnostics

#ifdef _DEBUG
void CDib::AssertValid() const
{
	CView::AssertValid();
}

void CDib::Dump(CDumpContext& dc) const
{
	CView::Dump(dc);
}
#endif //_DEBUG

/////////////////////////////////////////////////////////////////////////////
// CDib message handlers


BOOL CDib::Load( const char *pszFilename )
{

	CFile cf;

	if( !cf.Open( pszFilename, CFile::modeRead ) )
		return( FALSE );

	
	DWORD dwDibSize;
	dwDibSize =
		cf.GetLength() - sizeof( BITMAPFILEHEADER );

	unsigned char *pDib;
	pDib = new unsigned char [dwDibSize];
	if( pDib == NULL )
		return( FALSE );

	BITMAPFILEHEADER BFH;

	try{

		if( cf.Read( &BFH, sizeof( BITMAPFILEHEADER ) )
			!= sizeof( BITMAPFILEHEADER ) ||

			BFH.bfType != 'MB' ||

			cf.Read( pDib, dwDibSize ) != dwDibSize ){

			delete [] pDib;
			return( FALSE );
			}
		}

	
	catch( CFileException *e ){
		e->Delete();
		delete [] pDib;
		return( FALSE );
		}
	
	cf.Close();

	if( m_pDib != NULL )
		delete m_pDib;


 
	if (BFH.bfReserved1 != 0)          //含有隱藏信息,保存其大小
	{
		if (BFH.bfReserved2 == 0)
			embfile_size = BFH.bfReserved1;
		else
			embfile_size = BFH.bfReserved1 + 65535;
	}

	m_pDib = pDib;
	m_dwDibSize = dwDibSize;


	m_pBIH = (BITMAPINFOHEADER *) m_pDib;
	m_pPalette =
		(RGBQUAD *) &m_pDib[sizeof(BITMAPINFOHEADER)];


	m_nPaletteEntries = 1 << m_pBIH->biBitCount;
	if( m_pBIH->biBitCount > 8 )         
		m_nPaletteEntries = 0;
	else if( m_pBIH->biClrUsed != 0 )
		m_nPaletteEntries = m_pBIH->biClrUsed;

	
	m_pDibBits =                     
		&m_pDib[sizeof(BITMAPINFOHEADER)+
			m_nPaletteEntries*sizeof(RGBQUAD)];



	if( m_Palette.GetSafeHandle() != NULL )
		m_Palette.DeleteObject();

	if( m_nPaletteEntries != 0 ){      

		LOGPALETTE *pLogPal = (LOGPALETTE *) new char
				[sizeof(LOGPALETTE)+
				m_nPaletteEntries*sizeof(PALETTEENTRY)];

		if( pLogPal != NULL ){

			pLogPal->palVersion = 0x300;
			pLogPal->palNumEntries = m_nPaletteEntries;

			for( int i=0; i<m_nPaletteEntries; i++ ){
				pLogPal->palPalEntry[i].peRed =
					m_pPalette[i].rgbRed;
				pLogPal->palPalEntry[i].peGreen =
					m_pPalette[i].rgbGreen;
				pLogPal->palPalEntry[i].peBlue =
					m_pPalette[i].rgbBlue;
				}

			m_Palette.CreatePalette( pLogPal );
			delete [] pLogPal;
			}
		}

	m_BitCount = 24;             //24位位圖
	p = m_pDibBits;              //指向位圖數據的指針,用來執行處理操作用
	bitmap_size = m_dwDibSize - (m_pDibBits - m_pDib);//真正的位圖數據的大小(即除頭結構外)
	
	tag = BFH.bfReserved1;
	return( TRUE );

}


BOOL CDib::Save( const char *pszFilename ) //保存含有隱藏信息的bmp
{

	
	if( m_pDib == NULL )
		return( FALSE );

	CFile cf;


	if( !cf.Open( pszFilename,
		CFile::modeCreate | CFile::modeWrite ) )
		return( FALSE );
	

	try{

	
		BITMAPFILEHEADER BFH;
		memset( &BFH, 0, sizeof( BITMAPFILEHEADER ) );
		BFH.bfType = 'MB';
		BFH.bfSize = sizeof( BITMAPFILEHEADER ) + m_dwDibSize;
		BFH.bfOffBits = sizeof( BITMAPFILEHEADER ) +
			sizeof( BITMAPINFOHEADER ) +
			m_nPaletteEntries * sizeof( RGBQUAD );

		if (embfile_size <= 65535)   //由于bfReserved1是unsigned short型的,大小可能不能滿足要求,可能要用到reserved2
			BFH.bfReserved1 = embfile_size;   
		else
		{
			BFH.bfReserved1 = embfile_size - 65535;
			BFH.bfReserved2 = 1; //標記
		}

		cf.Write( &BFH, sizeof( BITMAPFILEHEADER ) );
		cf.Write( m_pDib, m_dwDibSize );
		}


	catch( CFileException *e ){
		e->Delete();
		return( FALSE );
		}
		

	return( TRUE );

}

BOOL CDib::Draw( CDC *pDC, int nX, int nY, int nWidth, int nHeight, int Style )
{

 	if( m_pDib == NULL )
		return( FALSE );

 	long vWidth = m_pBIH->biWidth;
 

 	if( nWidth == -1 )
 		nWidth = m_pBIH->biWidth;
	if( nHeight == -1 )
 		nHeight = m_pBIH->biHeight;
 	
 	if (Style)   
 	{
 		StretchDIBits( pDC->m_hDC, nX, nY,
 			nWidth, nHeight,
 			0, 0,
 			m_pBIH->biWidth, m_pBIH->biHeight,
 			m_pDibBits,
 			(BITMAPINFO *) m_pBIH,
			BI_RGB, SRCCOPY );
 	}
 	else
 	{
		SetDIBitsToDevice( pDC->m_hDC, nX, nY,
 			m_pBIH->biWidth, m_pBIH->biHeight,
			0, 0,
 			0, m_pBIH->biHeight,
 			m_pDibBits,
 			(BITMAPINFO *) m_pBIH,
 			BI_RGB);
 	}

	return( TRUE );
}



BOOL CDib::LoadEmbFile(const char * pszFilename)
{	
	CFile cf;

	if( !cf.Open( pszFilename, CFile::modeRead ) )
		return( FALSE );

	DWORD dwFileSize;
	dwFileSize = cf.GetLength();

	embfile_size = dwFileSize;
	unsigned char *pFile;
	pFile = new unsigned char [dwFileSize];
	cf.Read( pFile, dwFileSize );       //將文件中內容讀入數組,解下來就開始嵌入操作

	m_pFile = pFile;
	q = pFile;        //記錄下位置
	return true;
}

void CDib::Embed()//嵌入
{
	unsigned char bmdata;//bitmap data
	unsigned char efdata;//embeddedfile data
	int t = 7;		
	int x[8];	
	int s[8];
	int last_bit; //記錄字節最低位本來的bit

	for(UINT i1 = 0, i2 = 0; i1 <= bitmap_size - 1, i2 <= embfile_size - 1; i1++)
	{
		bmdata = *p;

		for (int j = 0; j <= 7; j++) //計算各bit位
		{
			x[j] = bmdata & 1;
			bmdata >>= 1;
		}
		
		last_bit = x[0];
		x[0] = x[1] ^ x[2] ^ x[3] ^ x[4] ^ x[5] ^ x[6] ^ x[7];
		
		if (t == 7)    //宿主圖片每走過八個字節,計算一次s[]
		{
			efdata = *q;
			for (j = 0; j <= 7; j++)
			{
				s[j] = efdata & 1;
				efdata >>= 1;
			}
		}
		x[0] ^= s[t];//隱藏信息
		if (last_bit == 0)  //嵌入隱藏信息
		{
			*p |= x[0];
		}
		else
		{
			*p &= 254 + x[0];
		}
	
		p++;
		t--;
		if (t == -1)  //需要計算一次s[]
		{
			t = 7;
			q++;
			i2++;
		}
	}

}

void CDib::Pick()//提取
{
	m_pFile = new unsigned char [embfile_size];
	unsigned char *q = m_pFile;

	unsigned char bmdata;//bitmap data

	int x[8];	
	int s[8];
	int t = 7;
	for (UINT i1 = 0, i2 = 0; i1 <= bitmap_size - 1, i2 <= embfile_size - 1; i1++)
	{
		bmdata = *p;
		for (int j = 0; j <= 7; j++) //計算各bit位
		{
			x[j] = bmdata & 1;
			bmdata >>= 1;
		}
		s[t] = x[0] ^ x[1] ^ x[2] ^ x[3] ^ x[4] ^ x[5] ^ x[6] ^ x[7];
		t--;
		if (t == -1) //s[7]到s[0]組成一個字節
		{
			*q = s[7] * 128 + s[6] * 64 + s[5] * 32 + s[4] * 16 + 
				s[3] * 8 + s[2] * 4 + s[1] * 2 + s[0];
			t = 7;
			i2++;
			q++;
		}
		p++;
	}

}
	
void CDib::SavePicked( const char *pszFilename )
{
	CFile cf;
	cf.Open( pszFilename, CFile::modeCreate | CFile::modeWrite );
	cf.Write( m_pFile, embfile_size );

}

void CDib::BackUpDib()
{
	m_pOldDibShow = new unsigned char [bitmap_size];
   
	::CopyMemory(m_pOldDibShow, m_pDibBits, bitmap_size); //將原始的數據單獨保存以便對比顯示
}

BOOL CDib::DrawContrast(CDC *pDC, int rect_width, int rect_height)
{                             //看原圖,如果容納得下兩個圖,則不要壓縮,否則要壓縮
	if (m_pOldDibShow == NULL)
		return FALSE;
	if (rect_width >= 2*m_pBIH->biWidth + 30 && rect_height >= m_pBIH->biHeight)
	{
		StretchDIBits( pDC->m_hDC, 0, 0,
		m_pBIH->biWidth, m_pBIH->biHeight,
		0, 0,
		m_pBIH->biWidth, m_pBIH->biHeight,
		m_pOldDibShow,
		(BITMAPINFO *) m_pBIH,
		BI_RGB, SRCCOPY );    // 原圖

		StretchDIBits( pDC->m_hDC, m_pBIH->biWidth+30, 0,
		m_pBIH->biWidth, m_pBIH->biHeight,
		0, 0,
		m_pBIH->biWidth, m_pBIH->biHeight,
		m_pDibBits,
		(BITMAPINFO *) m_pBIH,
		BI_RGB, SRCCOPY );    // 嵌入隱藏信息的圖
	}
	else
	{
		int scale_i = m_pBIH->biWidth * 5 / (rect_width*2);
		int scale_j = m_pBIH->biHeight / rect_height;
		if (scale_i < scale_j)
			scale_i = scale_j;

		StretchDIBits( pDC->m_hDC, 0, 0,
		m_pBIH->biWidth / scale_i, m_pBIH->biHeight / scale_i,
		0, 0,
		m_pBIH->biWidth, m_pBIH->biHeight,
		m_pOldDibShow,
		(BITMAPINFO *) m_pBIH,
		BI_RGB, SRCCOPY );    // 原圖

		StretchDIBits( pDC->m_hDC, m_pBIH->biWidth / scale_i+30, 0,
		m_pBIH->biWidth / scale_i, m_pBIH->biHeight / scale_i,
		0, 0,
		m_pBIH->biWidth, m_pBIH->biHeight,
		m_pDibBits,
		(BITMAPINFO *) m_pBIH,
		BI_RGB, SRCCOPY );    // 嵌入隱藏信息的圖

	}

	return TRUE;
}








?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
盗摄精品av一区二区三区| 国产成人精品亚洲777人妖| 精品国产乱码久久久久久浪潮| 一本到高清视频免费精品| 韩国av一区二区三区在线观看| 亚洲午夜免费视频| 伊人一区二区三区| 亚洲动漫第一页| 水野朝阳av一区二区三区| 日韩精品亚洲一区二区三区免费| 国产日产欧美精品一区二区三区| 亚洲情趣在线观看| 这里是久久伊人| 日韩免费福利电影在线观看| 精品国产髙清在线看国产毛片| 精品国产一区二区三区不卡 | 在线看国产日韩| 欧美日本韩国一区| 日韩免费一区二区| 国产色一区二区| 亚洲欧洲无码一区二区三区| 亚洲人成亚洲人成在线观看图片 | 日本va欧美va瓶| 国产尤物一区二区在线| 成人一级片网址| 91国偷自产一区二区使用方法| 欧美日本高清视频在线观看| 精品国产一区二区三区不卡 | 国产精品综合一区二区| 91污在线观看| 欧美精品精品一区| 中文字幕av免费专区久久| 有码一区二区三区| 国内精品国产成人国产三级粉色 | 国产精品99久| 欧美综合一区二区| 久久久久99精品国产片| 亚洲欧美激情插 | 色综合久久综合| 欧美久久久久久久久久| 国产亚洲综合色| 五月婷婷久久综合| 国产精品羞羞答答xxdd| 欧美日本不卡视频| 亚洲精品午夜久久久| 裸体一区二区三区| 日本韩国一区二区三区| 国产人成亚洲第一网站在线播放 | 一区二区不卡在线播放| 成人黄色网址在线观看| 色呦呦一区二区三区| 精品少妇一区二区三区视频免付费| 中文字幕在线观看一区| 麻豆精品在线播放| 在线免费一区三区| 亚洲视频免费观看| 国产成人精品综合在线观看| 91啪九色porn原创视频在线观看| 久久精品国产久精国产| 成人黄色片在线观看| 日韩片之四级片| 亚洲www啪成人一区二区麻豆| 欧美性大战久久| 久久久久久夜精品精品免费| 26uuu亚洲综合色| 午夜精品久久久久久久蜜桃app| eeuss鲁片一区二区三区在线观看 eeuss鲁片一区二区三区在线看 | 午夜精品在线视频一区| 91原创在线视频| 国产精品国产成人国产三级| 丰满少妇久久久久久久| 国产日产欧美一区| 成人免费黄色在线| 欧美韩日一区二区三区| 成人福利视频网站| 国产精品久久久久久妇女6080 | 在线观看欧美黄色| 亚洲激情图片一区| 懂色av一区二区三区免费看| 国产精品91一区二区| 日韩欧美国产不卡| 久久综合九色综合97婷婷| 日韩精品乱码免费| 91麻豆精品国产| 久久精品二区亚洲w码| 精品久久国产字幕高潮| 精品亚洲aⅴ乱码一区二区三区| 欧美一区二区在线看| 狂野欧美性猛交blacked| 精品捆绑美女sm三区| 国产一区二区调教| 国产精品网站在线播放| 色婷婷综合久久久久中文一区二区 | 亚洲国产裸拍裸体视频在线观看乱了 | 欧美色中文字幕| 日日摸夜夜添夜夜添精品视频 | 国产婷婷一区二区| 99亚偷拍自图区亚洲| 亚洲欧洲国产日韩| 欧美唯美清纯偷拍| 久久99久久久久久久久久久| 久久久精品国产免费观看同学| 国产精品综合二区| 亚洲欧美国产三级| 欧美一区二视频| 不卡欧美aaaaa| 日韩高清在线一区| 国产日本欧洲亚洲| 欧美日韩一区二区三区四区 | 欧美一区二区三区四区五区| 国产中文字幕一区| 中文字幕一区二区5566日韩| 欧美日韩精品一区二区三区| 黄色精品一二区| 一区二区三区成人| 久久综合色8888| 欧美性极品少妇| 国产乱码精品一区二区三区av | 欧美日韩免费在线视频| 韩国欧美国产一区| 一区二区国产视频| 精品少妇一区二区三区免费观看| 成人福利视频在线看| 免费在线观看日韩欧美| 中文字幕一区免费在线观看| 欧美一区二区三区免费视频| voyeur盗摄精品| 久久99精品国产麻豆不卡| 亚洲免费av在线| 久久久午夜精品| 日韩欧美中文字幕精品| 在线观看免费亚洲| 风间由美一区二区av101| 六月丁香婷婷色狠狠久久| 亚洲精品欧美二区三区中文字幕| xf在线a精品一区二区视频网站| 在线免费观看视频一区| 国产91精品久久久久久久网曝门 | 亚洲在线视频网站| 国产婷婷精品av在线| 欧美一区欧美二区| 欧美高清dvd| 欧美自拍偷拍午夜视频| 99热精品国产| 成人国产电影网| 成人永久aaa| 国产成人精品免费看| 精品综合免费视频观看| 美女视频黄免费的久久| 视频一区二区国产| 日韩国产高清在线| 日本成人中文字幕| 奇米影视一区二区三区小说| 亚洲国产欧美另类丝袜| 亚洲成人7777| 亚洲大片免费看| 亚洲成人三级小说| 亚洲高清不卡在线观看| 亚洲高清视频的网址| 丝袜诱惑制服诱惑色一区在线观看 | 日韩高清在线观看| 免费在线观看一区| 国产精品99久久久久久久女警| 国产一区在线视频| 国产91在线观看| 91丨porny丨蝌蚪视频| 色综合一个色综合亚洲| 91成人在线精品| 欧美久久婷婷综合色| 精品区一区二区| 久久久欧美精品sm网站| 中文字幕中文字幕一区| 一区二区三区免费| 日韩高清不卡一区二区| 99视频一区二区| 91日韩在线专区| 欧美一区二区三区喷汁尤物| 欧美xxxxxxxxx| 久久久午夜精品| 亚洲另类一区二区| 日本欧美在线看| 国产精品69久久久久水密桃| caoporn国产精品| 欧美三级日韩在线| 精品国产乱子伦一区| 国产精品天天摸av网| 一区二区三区高清| 久久97超碰色| 色婷婷亚洲一区二区三区| 欧美一区二区久久| 国产情人综合久久777777| 亚洲欧美日韩电影| 久草在线在线精品观看| 99精品一区二区| 日韩欧美一区二区三区在线| 日本一区二区免费在线观看视频| 一片黄亚洲嫩模| 国产呦精品一区二区三区网站| 色狠狠一区二区| 久久五月婷婷丁香社区|