保存文件void SaveFile(char* name,MYBITMAP* m){ CFile file(name,CFile::modeWrite|CFile::modeCreate); file.Write(m->bmphdr,sizeof(BITMAPFILEHEADER)); file.Write(m->lpbmp,sizeof(BITMAPINFOHEADER)); file.WriteHuge(m->palette,m->len); file.WriteHuge(m->data,WIDTHBYTES(m->lpbmp->biWidth*8)*m->lpbmp->biHeight); file.Close(); }灰度化BOOL Gray(MYBITMAP* &myb){BITMAPFILEHEADER *bfh=(myb->bmphdr); BITMAPINFOHEADER *bih=(myb->lpbmp); int lw=WIDTHBYTES(bih->biWidth*8); int lh=bih->biHeight; bfh->bfSize = sizeof(BITMAPFILEHEADER)+sizeof(BITMAPINFOHEADER)+lw*bih->biHeight+256*4; bfh->bfOffBits = sizeof(BITMAPFILEHEADER)+sizeof(BITMAPINFOHEADER)+256*4; bih->biBitCount=8; bih->biClrUsed=256; bih->biClrImportant=0; bih->biSizeImage=lw*lh; //创建调色板 BYTE * pal = new BYTE[256*4]; memset(pal,0,256*4); for(int i=0;i<256;i++){ pal[i*4]=i; pal[i*4+1]=i; pal[i*4+2]=i; } if(myb->palette!=NULL){ delete myb->palette; } myb->palette=pal; myb->len=256*4; //修改数据 LPBYTE data = new BYTE[lw*lh]; for(int j=0;j<lh;j++){ for(int k=0;k<bih->biWidth;k++){ double r=myb->data[(j*bih->biWidth+k)*3]; double g=myb->data[(j*bih->biWidth+k)*3+1]; double b=myb->data[(j*bih->biWidth+k)*3+2]; data[j*bih->biWidth+k]=0.3*r+0.59*g+0.11*b; } } delete myb->data; myb->data=data; return 0; } //自定义位图格式 typedef struct mybitmay{ BITMAPFILEHEADER *bmphdr;//文件头 BITMAPINFOHEADER *lpbmp;//文件信息头] LPBYTE palette;//调色板 int len;//调色板长度 LPBYTE data;//文件数据 }MYBITMAP;
MYBITMAP *AttachFromName(LPCTSTR lpcPathName);//打开图片文件 MYBITMAP *AttachFromFile(CFile &file);//得到位图信息 #endif BOOL Gray(MYBITMAP* &myb);//灰度化 BOOL PaintDIB(HDC hDC,RECT des,RECT src, MYBITMAP myb);//在屏幕上画图 void SaveFile(char* name,MYBITMAP* m); HPALETTE GetPalette(MYBITMAP* m);
MYBITMAP *AttachFromName(LPCTSTR lpcPathName)//打开文件 { CFile file; if(!file.Open(lpcPathName,CFile::modeRead)) return 0; return AttachFromFile(file); } MYBITMAP *AttachFromFile(CFile &file)//得到图片信息 { LPBYTE lpData; BITMAPINFOHEADER *pBMIH; LPVOID lpvColorTable; int nColorTableEntries; BITMAPFILEHEADER *bmfHeader=(BITMAPFILEHEADER*)malloc(sizeof( BITMAPFILEHEADER)); if(!file.Read(bmfHeader,sizeof(BITMAPFILEHEADER))) { return FALSE; } if(bmfHeader->bfType!=MAKEWORD('B','M')) { return FALSE; } pBMIH=(BITMAPINFOHEADER*)malloc(bmfHeader->bfOffBits-sizeof(BITMAPFILEHEADER)); if(!file.Read(pBMIH,bmfHeader->bfOffBits-sizeof(BITMAPFILEHEADER)))//文件信息头 { delete pBMIH; return FALSE; } nColorTableEntries=(bmfHeader->bfOffBits-sizeof(BITMAPFILEHEADER)-sizeof(BITMAPINFOHEADER))/sizeof(RGBQUAD); if(nColorTableEntries>0) { lpvColorTable=pBMIH+1; } int nWidthBytes=WIDTHBYTES((pBMIH->biWidth)*pBMIH->biBitCount); lpData=new BYTE[pBMIH->biHeight*nWidthBytes*3]; printf("nWidthBytes:%d,biWidth:%d\n",nWidthBytes,pBMIH->biWidth); file.ReadHuge(lpData,pBMIH->biHeight*nWidthBytes*3); MYBITMAP *m = new MYBITMAP; m->bmphdr=bmfHeader; m->lpbmp=pBMIH; if(pBMIH->biClrUsed==0){ m->palette=0; m->len=0; } m->data=lpData; return m; }
显示在程序上
BOOL PaintDIB(HDC hDC,RECT des,RECT src, MYBITMAP myb){ BITMAPINFOHEADER* lpDIBHdr; // BITMAPINFOHEADER指针 BOOL bSuccess=FALSE; // 成功标志 HPALETTE hPal=NULL; // DIB调色板 HPALETTE hOldPal=NULL; // 以前的调色板 lpDIBHdr = myb.lpbmp; int lw=WIDTHBYTES(myb.lpbmp->biWidth*8); hPal=GetPalette(&myb); if (hPal != NULL) { // 选中调色板 hOldPal = ::SelectPalette(hDC, hPal, FALSE); } // 设置显示模式 ::SetStretchBltMode(hDC, COLORONCOLOR); int bw =myb.lpbmp->biWidth; int bh = myb.lpbmp->biHeight; // 判断是调用StretchDIBits()还是SetDIBitsToDevice()来绘制DIB对象 if(des.right-des.left>=(src.right-src.left)&& (des.bottom-des.top)>=(src.bottom-src.top) ) { // 原始大小,不用拉伸。 bSuccess = ::SetDIBitsToDevice(hDC, // hDC 0 , // DestX 0 , // DestY bw , // nDestWidth bh, // nDestHeight 0, // SrcX 0, // SrcY 0, // nStartScan bh, // nNumScans myb.data, // lpBits (LPBITMAPINFO)lpDIBHdr, // lpBitsInfo DIB_RGB_COLORS ); // wUsage } else { // 非原始大小,拉伸。 bSuccess = StretchDIBits(hDC, // hDC des.left , // DestX des.top , // DestY des.right , // nDestWidth des.bottom, // nDestHeight src.left, // SrcX src.top, // SrcY src.right, // nStartScan src.bottom, // nNumScans myb.data, // lpBits (LPBITMAPINFO)lpDIBHdr, // lpBitsInfo DIB_RGB_COLORS, SRCCOPY ); // wUsage } // 解除锁定 // 恢复以前的调色板 if (hOldPal != NULL) { ::SelectPalette(hDC, hOldPal, TRUE); } // 返回 return bSuccess; }
//调色板设置 HPALETTE GetPalette(MYBITMAP* m){ HPALETTE hPal=0; if(m->len!=0){ LOGPALETTE *lpLogPalette=(LOGPALETTE*)new BYTE[sizeof(LOGPALETTE)+255*sizeof(PALETTEENTRY)]; lpLogPalette->palVersion=0x300; lpLogPalette->palNumEntries=256; // lpLogPalette->palPalEntry =new PALETTEENTRY[256]; for(int i=0;i<256;i++){ PALETTEENTRY entry={i,i,i,0}; lpLogPalette->palPalEntry[i]=entry; } //memcpy(a+4,myb.palette,256*4); hPal=CreatePalette(lpLogPalette); delete lpLogPalette; } return hPal; }
这里有Jpg与bmp之转换的dll
- JpgVSbmp.rar (107.3 KB)
- 下载次数: 2
发表评论
-
Exe与Dll合并工具及源码下载
2015-05-03 15:30 1276相信有人会遇到这种情况,用vc做出来的程序附带了 ... -
SkinSharp破解版与模版皮肤下载与使用
2015-05-02 14:57 5865做MFC应用的时候,总觉得Virsual Studio ... -
VC6编译错误
2014-01-11 09:41 0dxguid.lib(dxguid.obj) : fatal ... -
sdgagasf
2013-11-22 10:59 0http://jxdx1.sc.chinaz.com/Fi ... -
BMP转jpg
2011-11-29 14:00 0使用jpgvsbmp.dll中的BmpToJpg方法 但是直接 ... -
试题01
2011-08-22 16:11 0第一个:写一个方法,参数传递一个字符串表达式,返回结果为表 ... -
试题01
2011-08-22 16:11 0第一个:写一个方法,参数传递一个字符串表达式,返回结果为表达式 ... -
四则运算的中缀转后缀,逆波兰表达式求值
2011-08-22 15:33 0首先描述问题 Java代码 给定一个字 ... -
程序试题收集
2011-08-22 16:08 0第一个:写一个方法,参数传递一个字符串表达式,返回结果为表达式 ... -
win32中加入控件
2010-12-28 22:12 0添加控件的话 可以用CreateWindow 来创建 所有的控 ... -
我参加的一些笔试
2010-06-14 13:37 770//亚信 1.下面会输出什么结果 char* getm(c ... -
VC显示位图数据
2010-03-30 22:47 955BOOL CTestView :: PaintDIB(HDC ... -
将字符串的转换为hash码
2010-03-22 01:10 1456#include "stdio.h" v ... -
find base addr of kernel32.dll
2010-03-22 01:08 786mov esi,fs:[0x30]//fs=thread ct ... -
Opencv下载安装
2010-03-22 01:05 17951.1版本 http://jaist.dl.sourcefo ...
相关推荐
VC图像处理编程入门的知识点涵盖如何在Visual C++环境(VC6.0)中开发数字图像处理程序。具体来说,涉及以下几个方面: 1. 程序框架建立 - 学会创建应用程序:了解如何在VisualC++6.0中新建应用程序,并设置工程...
【VC图像处理代码】是一个与计算机视觉相关的资源,主要涉及图像处理的核心算法,特别是特征点的寻找和匹配。在这个项目中,开发者可能使用了Visual C++(VC)作为编程环境,因为“VC”通常指的是微软的Visual C++,...
本压缩包中的"VC图像处理例程"是一组使用VC6.0编写的源代码,它为我们提供了一个了解和学习图像处理技术的实践平台。以下将对这个主题进行详细的探讨。 1. **VC6.0**:VC6.0是Microsoft Visual Studio的一个早期...
### VC图像处理系列之二_图像显示篇 #### 一、相关术语 在深入探讨图像显示之前,我们先了解一些图像处理中常见的专业术语。 **像素(Pixel)**:像素是构成数字图像的基本单位,是图像中最基本的采样单元。例如...
总的来说,"vc图像处理源码(比较全面)"提供了一个学习和实践图像处理的好机会。无论是对于初学者还是经验丰富的开发者,都能从中获取宝贵的知识,加深对图像处理原理的理解,并提升编程技能。通过研究和调试这些...
**VC图像处理Demo详解** 本篇将深入探讨“VC图像处理Demo”,这是一个使用Microsoft Visual C++(VC)编写的图像处理程序示例。虽然它在处理特定图片对象格式上存在限制,但该Demo仍提供了丰富的基础图像处理功能,...
本压缩包“VC图像处理常用代码”包含了多个关键的图像处理算法,这些算法在实际应用中具有重要的价值。下面将详细介绍其中涉及到的知识点。 1. 反色: 反色操作是图像处理中最基础的操作之一,它通过取像素值的补码...
这个"VC图像处理代码之—数字图像工程案例"集合提供了丰富的实践示例,可以帮助我们深入理解数字图像处理的基本原理和应用。在这个压缩包中,我们可以期待找到一系列基于VC++的图像处理程序,它们涵盖了各种算法和...
本项目“VC图像处理实现多功能”是一个利用VC++实现的图像处理程序,包含了多种图像处理技术,如二值化、锐化、平滑以及形态学操作等,旨在为开发者和研究人员提供一个功能丰富的工具集。 首先,**二值化**是图像...
"VC 图像处理谢鸣凤代码"是一个专门针对图像处理的代码集合,由谢鸣凤编写,涵盖了多个核心的图像处理技术。这个资源对于学习和实践VC++中的图像处理技术具有很高的价值。 首先,我们要了解图像处理的基本概念。...
在本文中,我们将深入探讨与"CDib.rar_CDib_CDib visual_VC 图像处理_vc++_vc图像处理"相关的主题,这是一个与Visual C++(VC++)图像处理相关的类库,特别适合那些需要在VC++环境中进行图像操作的开发者。...
《VC++图像处理源代码深度解析》 在计算机科学领域,图像处理是一项至关重要的技术,广泛应用于医学影像、遥感、视频分析、图形用户界面等多个领域。本篇将深入探讨基于VC++(Visual C++)的图像处理源代码,帮助...
在本文中,我们将深入探讨“vc图像处理程序与原理”,主要关注如何在Microsoft Visual C++ (VC++)环境中利用MFC库进行交通标志图像处理。MFC(Microsoft Foundation Classes)是微软提供的一套C++类库,它使得开发者...
在本篇“VC图像处理系列之6--界面设计及总结篇”中,我们将探讨如何在Visual C++(VC)环境中创建一个图像处理程序的用户界面,并对整个图像处理系列进行回顾与总结。虽然这个程序可能没有包含所有高级的图像处理...
总之,"VC图像处理与图像理解"是一个宝贵的资源,它不仅涵盖了图像处理的各个方面,还涉及了图像理解的前沿技术。通过学习和实践,开发者不仅可以提升编程技能,还能增强对视觉信息处理的理论理解,为未来的AI项目...
通过实际操作和实践,你将能够熟练地在VC中实现图像的锐化和边缘检测,为后续更复杂的图像处理任务打下坚实的基础。 总的来说,图像处理中的锐化和边缘检测是基础但至关重要的技术,它们在很多领域都有着广泛的应用...
本教程基于刘涛的VC图像处理讲座,旨在帮助开发者掌握如何在Visual C++中打开、显示和保存图像文件。这个教程修复了之前版本的一些问题,确保了代码的正确性和稳定性。 首先,我们要理解VC++中的图像处理涉及到的...