一些技巧(15)

一些技巧(15),第1张

概述typedef HRESULT (*DLLREGPROC)(void); /*///////////////////     函数 RegisterDll() 主要功能: 注册COM   返回值:  参数含义:    strFileName - 文件名   注:此函数只对用VB开发的COM有效,对用VC开发的COM无效 ////////////////////*/ BOOL RegisterDll typedefHRESulT(*DLLREGPROC)(voID); /*/////////////////// 函数RegisterDll() 主要功能:注册COM 返回值: 参数含义: strfilename-文件名 注:此函数只对用VB开发的COM有效,对用VC开发的COM无效 ////////////////////*/ BOolRegisterDll(CStringstrfilename) { DLLREGPROCpProc=NulL; HINSTANCEhModule=Loadlibrary(strfilename); if(hModule==NulL) returnFALSE; pProc=(DLLREGPROC)GetProcAddress(hModule,"DllRegisterServer"); if(pProc==NulL) { Freelibrary(hModule); returnFALSE; } (*pProc)(); Freelibrary(hModule); returnTRUE; } ================================== 24位转化为256色灰度 1.格式介绍 24位图,结构为:头信息、RGB数据 256位图,结构为:头信息、调色板、RGB数据索引 2.真彩图转256色图算法的源程序 //入口参数说明 //m_hData---24位真彩色图的RGB数据首地址 //m_hLength---24位真彩色图的RGB数据的长度 voIDTrueto256(voID*m_hData,longm_hLength) { //请创建自己的目录或获取当前目录: Cfilefile("F://abc.bmp",Cfile::modeCreate|Cfile::modeReaDWrite|Cfile::shareExclusive); //====位图文件头结构和位图信息结构=== BITMAPfileheaderbmfileheader; BITMAPINFOheaderbmInfo; DWORDDWOffSize,DWfileSize; DWOffSize=sizeof(BITMAPfileheader)+sizeof(BITMAPINFOheader);//文件头,位图信息头 DWfileSize=DWOffSize+lpbi->bmiheader.biHeight*lpbi->bmiheader.biWIDth*sizeof(BYTE)*4; //计算位图信息到位图数据间的偏移量(字节) DWORDDWOffBits=sizeof(BITMAPfileheader)+sizeof(BITMAPINFOheader)+256*sizeof(RGBQUAD); //填充BITMAPfileheader结构 bmfileheader.bfType=0x4d42;//"BM" bmfileheader.bfSize=DWfileSize; bmfileheader.bfReserved1=0; bmfileheader.bfReserved2=0; bmfileheader.bfOffBits=DWOffBits; //填充BITMAPINFOheader结构 bmInfo.biSize=sizeof(BITMAPINFOheader); bmInfo.biWIDth=lpbi->bmiheader.biWIDth;//位图的宽和高,根据实际情况修改 bmInfo.biHeight=lpbi->bmiheader.biHeight;// bmInfo.biPlanes=1; bmInfo.biBitCount=8; bmInfo.biCompression=0; bmInfo.biSizeImage=0; bmInfo.biXPelsPerMeter=0; bmInfo.biYPelsPerMeter=0; bmInfo.biClrUsed=0; bmInfo.biClrimportant=0; //写入文件头和位图信息 file.Write((LPSTR)&bmfileheader,sizeof(BITMAPfileheader)); file.Write((LPSTR)&bmInfo,sizeof(BITMAPINFOheader)); //====制作调色数据================================== RGBQUAD*pRGBQuad=newRGBQUAD[256]; //初始化为0 memset(pRGBQuad,256*sizeof(RGBQUAD)); for(intj=0;j<256;j++)//这样写是制作成256级灰度的图片 { pRGBQuad[j].rgbRed=j; pRGBQuad[j].rgbGreen=j; pRGBQuad[j].rgbBlue=j; } //写入调色板数据 file.Write((LPSTR)pRGBQuad,256*sizeof(RGBQUAD)); //循环取出所有像素================================ byte*temp2; temp2=(byte*)malloc(m_hLength/3*sizeof(byte)); inti; byteR,G,B; BYTE*m_TempData=(BYTE*)m_hData; for(i=0,j=0;i<m_hLength;i+=3,j++) { B=*(byte*)(m_TempData+i); G=*(byte*)(m_TempData+i+1); R=*(byte*)(m_TempData+i+2); *(temp2+j)=(R*30+B*59+G*11)/100;//真彩色到256色转换的公式 } file.Write((LPSTR)temp2,m_hLength/3);//写入BMP数据 file.Close(); } //256色数据大小比24位可以减少大约1/3 3.真彩色图的头信息的编写及显示 //真彩色保存BMP函数 //入口参数 //m_hfilename---文件名 //m_hData---RGB数据首地址 //m_Length---RGB数据长度 voIDSavePicture(CStringm_hfilename,BYTE*m_hData,longm_Length) { #defineDIB_header_MARKER((WORD)('M'<<8)|'B') intcy,cx; //cy=lpbi->bmiheader.biWIDth; //cx=lpbi->bmiheader.biHeight; //Bitmap文件头 BITMAPfileheaderbmfHdr; //文件类型"BM" bmfHdr.bfType=DIB_header_MARKER; // DWORDDWOffSize,DWfileSize; DWOffSize=sizeof(BITMAPfileheader)+sizeof(BITMAPINFOheader);//文件头,位图信息头 DWfileSize=DWOffSize+cx*cy*sizeof(BYTE)*4; //指定文件大小 bmfHdr.bfSize=DWfileSize; //两个保留字 bmfHdr.bfReserved1=0; bmfHdr.bfReserved2=0; bmfHdr.bfOffBits=DWOffSize; BITMAPI NFOheaderBIHdr; BIHdr.biSize=sizeof(BITMAPINFOheader); BIHdr.biWIDth=cy;////宽度 BIHdr.biHeight=cx;///高度 BIHdr.biPlanes=1; BIHdr.biBitCount=32; BIHdr.biCompression=BI_RGB; BIHdr.biSizeImage=0; BIHdr.biXPelsPerMeter=0; BIHdr.biYPelsPerMeter=0; BIHdr.biClrUsed=0; BIHdr.biClrimportant=0; Cfilefile; CfileExceptionfe; file.Open(m_hfilename.GetBuffer(),Cfile::modeCreate|Cfile::modeWrite|Cfile::shareExclusive,&fe); file.Write(&bmfHdr,sizeof(BITMAPfileheader)); file.Write(&lpbi->bmiheader,sizeof(BITMAPINFOheader)); file.Write(m_hData,m_Length); file.Close(); } ==================================================== 模态对话框是一个使用另一个不可以使用. 总结

以上是内存溢出为你收集整理的一些技巧(15)全部内容,希望文章能够帮你解决一些技巧(15)所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/langs/1294611.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-10
下一篇 2022-06-10

发表评论

登录后才能评论

评论列表(0条)

保存