⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 dib.h

📁 面向软件工程的Visual C++网络程序开发
💻 H
字号:
// Dib.h: interface for the CDib class.
//
//////////////////////////////////////////////////////////////////////

#if !defined(AFX_DIB_H__9529A10B_4D30_11D5_A048_00E04C3F26B2__INCLUDED_)
#define AFX_DIB_H__9529A10B_4D30_11D5_A048_00E04C3F26B2__INCLUDED_

#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000

#include "DibApiHead.h"
#include "DibApi.h"
#include "ImageProc.h"

class AFX_EXT_CLASS CDib : public CObject  
{
	DECLARE_DYNCREATE(CDib)
//	DECLARE_SERIAL(CDib)

public:
	HDIB		m_hDib;
	HBITMAP		m_hBitmap;	//Handle of DIBSection
	CPalette*	m_pPalette;
	CBitmap*	m_pBitmap;

	//private member data
private:
	CDC*		m_pMemDC;
	CBitmap*	m_pBitmapTmp;
	CPalette*	m_pPaletteTmp;
	HDIB		m_hDibTmp;
private:
public:
	BOOL		Undo();
	//public member function
public:
	CDib();
//基于系统调色板创建缺省的空CDib对象
	BOOL Create(DWORD dwWidth, DWORD dwHeight);
//创建缺省的空CDib对象
	BOOL Create(DWORD dwWidth, DWORD dwHeight, WORD wBitCount);
//从DIB数据块创建缺省的CDib对象
	BOOL Create(LPBYTE lpDIB);
//从DIB数据块创建CDib对象
	BOOL Create(LPBYTE lpDIB, WORD wBitCount);
//从DIBSECTION创建缺省的CDib对象
	BOOL Create(HBITMAP hBitmap);
//从DDB创建缺省的CDib对象
	BOOL Create(HBITMAP hBitmap, WORD wBitCount);
//从DDB和指定的调色板创建缺省的CDib对象
	BOOL Create(HBITMAP hBitmap, HPALETTE hPalette);
//从DDB和指定的调色板创建CDib对象
	BOOL Create(HBITMAP hBitmap, HPALETTE hPalette, WORD wBitCount);
//从屏幕的指定区域显示创建缺省的CDib对象
	BOOL Create(CRect rcScreen);
//从指定窗口显示创建缺省的CDib对象
	BOOL Create(HWND hWnd, WORD fPrintArea);
//从指定窗口客户区的指定区域显示创建缺省的CDib对象
	BOOL Create(HWND hWnd, CRect rcClientArea);

	//Attach handle
	BOOL Attach(HDIB hDib); //将指定的DIB句柄与CDib对象联系起来

	//load / save 
//从指定的资源号创建缺省的CDib对象
	BOOL Load(UINT uIDs, LPCTSTR lpszDibType);
//从指定的资源名创建缺省的CDib对象
	BOOL Load(LPCTSTR lpszDibRes, LPCTSTR lpszDibType);
//从指定的DIB文件创建缺省的CDib对象
	BOOL Load(LPCTSTR lpszDibFile);

	BOOL Save(LPCTSTR lpszDibFile);
	BOOL Read(CFile* pFile);
	BOOL Write(CFile* pFile);

	//deconstructor
	virtual ~CDib();

	//Destroy
	void Destroy();
	HDIB Detach();
	
	//overlaying serialize
	virtual void Serialize(CArchive& ar);

	//display
	BOOL Display(CDC* pDC, int xDest, int yDest, int nWidthDest,
			int nHeightDest, int xSrc, int ySrc, DWORD dwRop = SRCCOPY);

	BOOL Display(CDC* pDC, int xDest, int yDest, int nWidthDest,
			int nHeightDest, int xSrc, int ySrc, int nWidthSrc,
			int nHeightSrc, DWORD dwRop = SRCCOPY);

	BOOL Display(CDC* pDC, int x, int y, DWORD dwRop = SRCCOPY);
	BOOL Display(CDC* pDC, CRect rcDest, CRect rcSrc, DWORD dwRop = SRCCOPY);
	BOOL DisplayPalette(CDC* pDC, CRect rc);

	BOOL DisplayTransparent(CDC* pDC, CDib* pMaskDib); // hDib 为1bit位图

	//DC for modify DIB
	CDC* BeginPaint(CDC* pDC);
	void EndPaint();

	//DDBand palette
	BOOL BuildBitmap();
	BOOL BuildPalette();

	//attributes
	BOOL IsEmpty();
	DWORD GetCompression();
	WORD GetBitCount();
	LONG GetWidth();
	LONG GetHeight();
	LONG GetWidthBytes();
	WORD GetColorNumber();
	WORD GetPaletteSize();
	CBitmap* GetBitmap();
	CPalette* GetPalette();
	HANDLE GetHandle();
	LPBYTE GetBitsPtr();
	COLORREF GetPixel(LONG x,LONG y);
	LONG GetPixelOffset(LONG x, LONG y);
	BOOL ConvertFormat(WORD wBitCount);

	//operator 
	COLORREF operator[](LONG y);

	//Bitmap transform
	HDIB Copy(CRect& rect);
	HDIB Cut(CRect& rect);
	BOOL Merge(HDIB hDib, CPoint ptTopLeft);
	BOOL Crop(CRect& rect);
	BOOL Rotate90();
	BOOL Rotate180();
	BOOL Rotate270();
	BOOL FlipHorz();
	BOOL FlipVert();
	BOOL Zoom(double fRatioX, double fRatioY);
	BOOL ChangeImageSize(int nWidth, int nHeight);
	BOOL ChangeCanvasSize(int nWidth, int nHeight, int nPosition);

	//Color Transform
	BOOL IsRequireDither(CDC* pDC);
	BOOL DitherDisplay(CDC* pDC, CRect rcRect, CRect rcSrc, 
						DWORD dwRop = SRCCOPY);
	BOOL ColorQuantize(int nColors);
	BOOL ChangeToGrayScale(int nMethed = MAXIMUM_GRAY,
							double fRedWeight = 0.30,
							double fGreenWeight = 0.59,
							double fBlueWeight = 0.11);

	BOOL ChangeToGrayDib(int nMethed = MEAN_GRAY,
							double fRedWeight = 0.30,
							double fGreenWeight = 0.59,
							double fBlueWeight = 0.11);

	BOOL AdjustColor(int nColorModel, int v1, int v2, int v3);
	BOOL AdjustBrightness(int v);
	BOOL AdjustConcrast(int v);

	void DibClear();	//将DIB中所有象素值清零

	//调色板操作
	BOOL GetPalette(int i, RGBQUAD& rgb);
	BOOL GetPalette(int i, RGBQUAD* rgb);
	BOOL SetPalette(int i, RGBQUAD& rgb);
	BOOL SetPalette(int i, RGBQUAD* rgb);
	BOOL SetPalette(LPLOGPALETTE lpPal);
	BOOL SetPalette(HPALETTE hLogPal);

	int Normalize();
	//数组操作
	BOOL GetImage(CRect& rect, IMAGE& buf);		 //仅对灰度图
	BOOL PutImage(CRect& rect, IMAGE& buf);
	BOOL GetImage(CRect& rect, IMAGE& r, IMAGE& g, IMAGE& b); //仅对24位真彩色图象
	BOOL PutImage(CRect& rect, IMAGE& r, IMAGE& g, IMAGE& b);
//	BOOL GetImage(CRect& rect, COLORIMAGE& ci);
//	BOOL PutImage(CRect& rect, COLORIMAGE& ci);
	//private member function
private:
	BOOL UpdateInternal();


};

#endif // !defined(AFX_DIB_H__9529A10B_4D30_11D5_A048_00E04C3F26B2__INCLUDED_)

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -