社区
图形处理/算法
帖子详情
关于CDib的问题
lizilily
2003-06-12 04:04:24
我定义了一个CDib类,在其中从写了Serialize(),read() ,write(),load(),save(),
我要实现打开和保存文件,则在Doc文件中怎么用CDib中定义的那些函数实现,不用编写OnOpenDocument()和OnSaveDocument()
...全文
32
回复
打赏
收藏
关于CDib的问题
我定义了一个CDib类,在其中从写了Serialize(),read() ,write(),load(),save(), 我要实现打开和保存文件,则在Doc文件中怎么用CDib中定义的那些函数实现,不用编写OnOpenDocument()和OnSaveDocument()
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
CDIB
类
CDIB
类
CDIB
类
CDIB
类
CDIB
类
CDIB
类
CDIB
类
CDIB
类
CDIB
类
CDIB
类
CDIB
类
CDIB
类
CDIB
类
CDIB
类
CDIB
类
CDIB
类
cdib
类(包含头文件和源文件)
// 将
CDib
对象按照指定的尺寸输出到显示器(或者打印机) BOOL Draw(CDC* pDC, CPoint origin, CSize size); // until we implemnt CreateDibSection // 创建一个DIB短,图象内存将不被初始化 HBITMAP CreateSection(CDC* pDC = NULL); // 将
CDib
对象的逻辑调色板选入设备上下文,然后实现该调色板 UINT UsePalette(CDC* pDC, BOOL bBackground = FALSE); // 如果调色板存在的话,读取调色板,并创建一个Windows调色板 BOOL MakePalette();
一个简单的
CDIB
类
〉
CDIB
功能 提供针对设备无关位图的一系列操作。 〉
CDIB
使用方法 将DIB目录复制到工程的原文件目录中。 在工程的Source Files中添加DIB文件夹,并导入DIB目录中的所有文件。 在需要使用DIB的文件中添加 include "dib.h" using namespace DIB; 1)读取Bitmap图片 //
CDib
对象可以从读取Bitmap,DIB文件数据。 //之前需要创建CFile对象,而后从CFile对象读取数据。
CDib
m_Dib; CFile* pf; pf=new CFile; pf->Open(m_ImageName,CFile::modeRead); //m_ImageName为路径加文件名,如"C:\\Img\\My_Bitmap.bmp" m_Dib.Read(pf); pf->Close(); delete pf; 2)保存
CDib
对象到文件 //m_Dib是包含有图像数据
CDib
对象 //pFile 指向已经创建的可对文件进行写操作的CFile对象 m_Dib.write(CFile* pFile) 3)从
CDIB
获得图像数据 //m_Dib 包含有图像数据
CDib
对象 //realDataFLag 选择是返回真实图像数据,还是返回灰度数据的布尔值变量(bool),为真时返回的是图像真实数据。 unsigned char * img; img=m_Dib.GetImgPtr(realDataFLag); //获得的图像数据是以左上角为(0,0)点开始的从左至右, //从上至下,具有真实宽度(非补4)的数据 //realDataFlag为真时返回的是图像真实数据 //realDataFlag为假时返回的是灰度化的图像数据 4)将图像数据赋给
CDib
对象 //m_Dib是包含有图像数据
CDib
对象 //img 指向图像数据的无符号字符型指针(unsigned char *) //realDataFLag 指明输入的是真实图像数据,还是返回灰度数据的布尔值变量(bool),为真时输入的是图像真实数据。 m_Dib.SetImgPtr(img,realDataFlag);//设置图像数据 5)从图像数据创建
CDib
对象
CDib
m_Dib m_Dib.CreateDib(pImgData,width,height,nBitCount);//pImgData为指向图象数据的指针 //nBitCount一个像素所用的比特数 目前仅支持8 6)由
CDib
对象创建Bitmap对象 //m_Dib是包含有图像数据
CDib
对象 HBITMAP bitmap; CDC * pDC=AfxGetApp()->GetMainWnd()->GetDC(); bitmap=m_Dib.CreateBitmap(pDC)//输入值为 CDC * ,一般可通过AfxGetApp()->GetMainWnd()->GetDC()获得 7)显示图象中的特殊信息 在处理过程中将图像中的特殊信息用251~255表示(对彩色图像,将R、G、B赋予251~255的相同数值) 将灰度图象中灰度值大于等于251的不需特殊显示的像素赋为250, 将彩色图像中R=G=B且大于等于251的不需特殊显示的像素赋为(250,250,250) 而后按4)中描述的将图像数据赋给
CDib
对象 最后调用EnhanceColor()将
CDib
对象转化为可以显示特殊信息的图像
CDib
类打开保存BMP图像
使用
CDIB
类实现在VC中打开显示BMP图像,并进行保存,是图像处理入门的必备资料!
超强的图像处理类
CDib
///////////////////////图像处理函数////////////////////////////////////// void ChangeBrightness(
CDib
* pOrigDib, int nChange);//nChange是亮度的改变量 //改变图像亮度 pOrigDib 为原先的图像 void ChangeContrast(
CDib
* pOrigDib, int nChange);//nChange是对比度的改变量 //改变图像对比度 pOrigDib 为原先的图像 void Render(
CDib
* pOrigDib, BYTE byRed, BYTE byGreen, BYTE byBlue); //着色 void Scale(
CDib
* pOrigDib, int nWidth, int nHeight); //缩放图像,pOrigDib 为原先的图像,nWidth为缩放后的宽度, nHeight为缩放后的高度 void Rotate(
CDib
* pOrigDib, int nXCenter, int nYCenter, float fTheta); //旋转图像,pOrigDib为原图,(nXCenter,nYCenter)为旋转中心的坐标,fTheta为旋转角度 void MirrorX(
CDib
* pOrigDib, int x, int y, int nWidth, int nHeight); //垂直方向的镜像变换,(x,y)为起始点,nWidth,nHeight为镜像变换的区域 void MirrorY(
CDib
* pOirgDib, int x, int y, int nWidth, int nHeight); //水平方向的镜像变换,(x,y)为起始点,nWidth,nHeight为镜像变换的区域 void ConvolutionFilter(
CDib
* pOrigDib, int* pnKernel, int nRows, int nCols); //卷积滤波器,pnKernel为 nRows * nCols 的卷积核 void PercentileFilter(
CDib
* pOrigDib, int nPercentage, int nRows, int nCols); //百分比滤波器, nPercentage确定百分比, 模板为 nRows * nCols void ReverseColor(); //图像反色,原先x, 变为255 - x void DibCopy(
CDib
* pOrigDib); //重载 = 操作 void ClipRect(
CDib
* pDib, int x, int y, int nWidth, int nHeight); //剪切操作 //////////////////////////////////////////////////////////////////////////////// /////////////////文件存取函数/////////////////////////////////////////////////// void SaveToBMPFile(const char* pstFileName); //存为位图文件,按其自身的位数存储 void SaveToJPGFile(const char* pszJpgFileName,int nQuality); //存为JPG文件 void LoadFromJPGFile(const char* psrFileName); //从JPG文件中读取 void LoadFromBMPFile(const char* pszDibFileName); //从BMP文件中读取 void SaveAs256Bitmap(const char *pszDibFileName); //存为256色位图 void SaveAsBWBitmap(const char *pszDibFileName); //存为单色位图 void SaveAs256GrayBitmap(const char *pszDibFileName); //存为256级灰度位图 void SaveAs24BitBMPFile(const char* pstFileName); //存为24位位图 //////////////////////////////////////////////////////////////////////////////// ////////////////图像格式转换函数//////////////////////////////////////////////// bool GetHistValue(int nModulus, int nCoef, int* pRed, int* pGreen, int* pBlue, int* pGray); //取得直方图的统计数值 bool ChangeTo256Gray(
CDib
* pOrigDib = NULL); //将图像转换成256色灰度图,pOrigDib为待转换的图像,缺省则转换自身 void SetTo256Gray(); bool ChangeToBW(
CDib
* pOrigDib = NULL, int byCritical = 128); //二值化,BW: black & white, byCritical为阈值,缺省为128 void SetToBW(); void QuantizeColor(LPBYTE lpbyDibBits24, int nScanWidth, int nScanHeight, LPBYTE lpbyDibBits8, CPalette* pPalette); //对颜色进行量化, 结果被保存在逻辑调色盘pPalette中, 同时将24位数据量化为8位数据, 并存放于lpbyDdbBits8之中 //该算法保留系统默认的20种静态颜色 void SetTo24Bitmap(); //格式转换,置颜色深度为24位真彩色 void SetTo256Color(); //格式转换, 置颜色深度为256色(8位) ////////////////////////////////////////////////////////////////////////////////// #ifdef _DEBUG virtual void Dump(CDumpContext& dc) const; virtual void AssertValid() const; #endif private: void Sort(int *p, int length); //methods void Init(); int IncreaseContrast(int nOrigColor,int nChange); //OrigColor为原值,函数返回改变后的值 int DecreaseContrast(int nOrigColor,int nChange); BYTE* GetDib24Bit(DWORD nOrigSize, int nWidth, int nHeight); //将图像格式转换为24位 HPALETTE CreateBitmapPalette(); //attributes BYTE m_byUpper; //像素颜色的上阀值 BYTE m_byLower; //像素颜色的下阀值 }; #endif/*/////////////////////////////////////////////////////////////////////// // End of file 'Dib.h' // /////////////////////////////////////////////////////////////////////////////*/
图形处理/算法
19,469
社区成员
50,697
社区内容
发帖
与我相关
我的任务
图形处理/算法
VC/MFC 图形处理/算法
复制链接
扫一扫
分享
社区描述
VC/MFC 图形处理/算法
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章