投影法和差影法的源程序

以下是投影法的源程序,第二个参数是个BOOL变量,为真时表示在水平方向上做投影,否则在垂直方向上做投影。要注意的是,我们针对的虽然是二值图,但为了处理的方便,用的是256级灰度图,不过只用到了0和255两种灰度级。

BOOL Projection(HWND hWnd,BOOL Hori)
{
DWORD        OffBits,BufSize;
LPBITMAPINFOHEADER  lpImgData;
LPSTR                lpPtr;
HLOCAL            hTempImgData;
LPBITMAPINFOHEADER  lpTempImgData;
LPSTR                lpTempPtr;
HDC                     hDc;
HFILE               hf;
LONG           x,y;
int                       num;
//用的是256级灰度图,不过只用到了0和255两种灰度级。
if( NumColors!=256){
MessageBox(hWnd,"Must be a mono bitmap with grayscale palette!",
"Error Message",MB_OK|MB_ICONEXCLAMATION);
return FALSE;
}
//到位图数据的偏移值
OffBits=bf.bfOffBits-sizeof(BITMAPFILEHEADER);
//缓冲区大小
BufSize=OffBits+bi.biHeight*LineBytes;
//为新图缓冲区分配内存
if((hTempImgData=LocalAlloc(LHND,BufSize))==NULL)
{
MessageBox(hWnd,"Error alloc memory!","Error Message",
MB_OK|MB_ICONEXCLAMATION);
return FALSE;
}
lpImgData=(LPBITMAPINFOHEADER)GlobalLock(hImgData);
lpTempImgData=(LPBITMAPINFOHEADER)LocalLock(hTempImgData);
//新图缓冲区初始化为255
memset(lpTempImgData,(BYTE)255,BufSize);
//拷贝头信息
memcpy(lpTempImgData,lpImgData,OffBits);
if(Hori)
{
//水平投影
for(y=0;y<bi.biHeight;y++){
lpPtr=(char *)lpImgData+(BufSize-LineBytes-y*LineBytes);
num=0; //计数器初始化为0
for(x=0;x<bi.biWidth;x++)
if(*(lpPtr++)!=0) //是白点
num++; //计数器加1
lpTempPtr=(char *)lpTempImgData+(BufSize-LineBytes-y*LineBytes);
for(x=0;x<num;x++)
*(lpTempPtr++)=0; //在新图中,该行中共有num个黑点
}
}
else{ //垂直投影
for(x=0;x<bi.biWidth;x++){
num=0; //计数器初始化为0
lpPtr=(char *)lpImgData+(BufSize-LineBytes)+x;
for(y=0;y<bi.biHeight;y++){
if(*lpPtr!=0)
num++; //计数器加1
lpPtr-=LineBytes;
}
lpTempPtr=(char *)lpTempImgData+OffBits+x;
for(y=0;y<num;y++){
*lpTempPtr=0; //在新图中,该列中共有num个黑点
lpTempPtr+=LineBytes;
}
}
}
if(hBitmap!=NULL)
DeleteObject(hBitmap);
hDc=GetDC(hWnd);
//创立一个新的位图
hBitmap=CreateDIBitmap(hDc,(LPBITMAPINFOHEADER)lpTempImgData,
(LONG)CBM_INIT,
(LPSTR)lpTempImgData+
sizeof(BITMAPINFOHEADER)+
NumColors*sizeof(RGBQUAD),
(LPBITMAPINFO)lpTempImgData,
DIB_RGB_COLORS);
//起不同的结果文件名
if(Hori)
hf=_lcreat("c:\\hproject.bmp",0);
else
hf=_lcreat("c:\\vproject.bmp",0);
_lwrite(hf,(LPSTR)&bf,sizeof(BITMAPFILEHEADER));
_lwrite(hf,(LPSTR)lpTempImgData,BufSize);
_lclose(hf);
//释放内存和资源
ReleaseDC(hWnd,hDc);
LocalUnlock(hTempImgData);
LocalFree(hTempImgData);
GlobalUnlock(hImgData);
return TRUE;
}

时间: 2024-12-22 19:39:55

投影法和差影法的源程序的相关文章

单链表的头插法和尾插法,用同一个方法求长度。。。。

问题描述 单链表的头插法和尾插法,用同一个方法求长度.... #include <stdio.h>#include <stdlib.h>#include <malloc.h>//单链表结构typedef int datatype;typedef struct node{ datatype data; struct node *next;}linklist;linklist *head*p;//指针类型说明/*头插法建表用头插法建成的链表中结点的次序和输入的顺序是相反的.

徐龙:尽快制定信息安全法和电子支付法,提高法律层次以保障交易安全

在多家知名网站遭遇"信息泄露门"后,个人信息安全保障显得尤为紧迫,越来越普及的网络购物电子支付如何变得更安全?全国人大代表中国移动广东公司总经理徐龙建议,尽快制定信息安全法和电子支付法,提高法律层次以保障交易安全. 徐龙认为,电子支付具有传统支付手段不可比拟的优点,不仅方便快捷省时省力,而且能够降低交易成本减少现金流提高交易透明度,但也存在交易诚信度不够高交易安全性不够强法律保护度不够广竞争秩序性不够严反洗钱意识不够浓等问题. 据了解,目前我国针对电子支付领域仅有几部法规和规范性文件.

徐龙建议加快制定信息安全法和电子支付法

中介交易 SEO诊断 淘宝客 云主机 技术大厅 数家知名网站遭遇"泄密风波",我们拿什么保护个人信息安全?网上购物电子支付如何变得更安全?--全国人大代表.中国移动广东公司总经理徐龙昨天建议,加快制定<中华人民共和国信息安全法>和<中华人民共和国电子支付法>. 统计数据显示,截至2011年底我国网民总数已经达到5.05亿,其中手机网民数量达3.4亿,特别是在电子商务领域,我国市场增长强劲.当前我国网络购物用户规模达到1.94亿人,手机在线支付用户达到3058万,

PS教程:调整层调色法和混合模式渲染法调灰蒙蒙照片

人像照片中经常出现照片画面发灰,层次表现不明确的情况.层次不明确就不能突出主题,整个画面看上去平淡无奇,所以调整照片的层次也是日常工作中必须要做的.其实解决照片缺少层次的问题并非难事,只要利用一些调色命令将照片中的人物主题突出,淡化其余不主要的部分就可以了,今天就针对平淡无层次的照片的调整介绍两种方法,来解决这种问题的存在.这两种方法所涉及到得命令及操作几乎都是在日常工作中常常用到的,只是经过一些综合罗列就演变成了调整层次的方法.方法一:"调整层调色法"就是利用图层面板下方调整层按钮中

077_《Delphi数字图像处理及高级应用》

<Delphi数字图像处理及高级应用> Delphi 教程 系列书籍 (077) <Delphi数字图像处理及高级应用> 网友(邦)整理 EMail: shuaihj@163.com 下载地址: Pdf 作者: 刘骏 出版社:科学出版社 ISBN:7030121635 上架时间:2003-11-5 出版日期:2003 年9月 开本:16开 页码:350 版次:1-1 内容简介 本书详细介绍了利用Delphi进行图像处理的技术,常用的图像格式,以及Delphi图像处理的常用方法Sca

多指标综合评价中指标正向化和无量纲化方法的选择

摘要:本文用实例说明了多指标综合评价中,用"倒数逆变换法"进行指标正向化时会完全改变原指标的分布规律,影响综合评价结果的准确性:对三种常用无量纲化方法--极差变换法.标准化法和均值化法的选择使用问题,用实例进行了比较分析. 关键词:综合评价,正向化,无量纲化,标准化法,均值化法 在多指标综合评价中,有些是指标值越大评价越好的指标,称为正向指标(也称效益型指标或望大型指标):有些是指标值越小评价越好的指标,称为逆向指标(也称成本型指标或望小型指标),还有些是指标值越接近某个值越好的指标,

基于大端法、小端法以及网络字节序的深入理解_C 语言

关于字节序(大端法.小端法)的定义<UNXI网络编程>定义:术语"小端"和"大端"表示多字节值的哪一端(小端或大端)存储在该值的起始地址.小端存在起始地址,即是小端字节序:大端存在起始地址,即是大端字节序. 也可以说: 1.小端法(Little-Endian)就是低位字节排放在内存的低地址端即该值的起始地址,高位字节排放在内存的高地址端. 2.大端法(Big-Endian)就是高位字节排放在内存的低地址端即该值的起始地址,低位字节排放在内存的高地址端.举

六顶帽子思考法的要求与好处

六顶帽子思考法的要求 作为一个小组性的活动,六顶帽子思考法要求: 1.戴同一顶帽子 小组所有的人都理解思考问题的方向,也就是说在同一时间非常清楚用哪一种思考方式进行思考. 例如鱼买回来了,现在要思考鱼的做法,所有的人要同时去想这件事,不管此时爱吃不爱吃.这个时候每个人已经失去自我了,自己爱吃什么鱼已经不重要.假设最后选择了红烧,那就要换一顶帽子,所有人都去想红烧鱼怎么做,有几种做法,这时同样要求失去自我,所有的成员要戴同一顶帽子.这样,水平思考法就可以在同一个事实.同一个原因的前提下集中所有人的

峨影耗资三千万影城5月运营投资米家山新片

新峨影厂区效果图 "峨影·1958"影城5月运营,米家山将执导<水电报> 峨影集团召开"峨影·1958"电影城设计方案新闻发布会,峨眉电影集团董事长何世平和"峨影·1958"电影城总规划设计师刘家琨双双出席,其间两人公布了"峨影·1958"的最终效果图,峨影厂内标志性的大楼将被改造成能容纳1958名观众,总共11个放映厅的超豪华影院,影厅的内部装修工作已接近尾声,放映设备即将调试安装,影城将于5月1日前后正式开业运