资讯   |   开发   |   选机中心   |   产品大全 | IBM | 惠普 | 联想 | 戴尔 | 苹果 | 神舟
更多: | 华硕 | 明基 | 方正 | 紫光 | TCL | 夏新 | 联宝 | 宏碁 | 七喜 | 长城 | 清华同方 | 海尔 | 三星 | 东芝 | 索尼 | 富士通 | LG | 技术 | ddnoon
当前位置:笔记本 > 软件开发 >
Advertisement
文章正文

求助黑白bmp图像缩放算法纯C源代码

类型:转载   责任编辑:asp.net   日期:2007/05/23


热门软件下载:


   

黑白bmp图像缩放算法纯C源代码,效果达到windows里的画图工具的缩放效果就可以  
 

网友回答:

发表者:kobefly

这个一般人自己写不了  
  呵呵  
  比较大  
  搜搜看有没有  
  帮你顶一个  
  顺便我也学学

发表者:oo

用StretchBlt,  
  如果是画到窗口里,直接用这个画就可以了,  
  如果要转到文件里,可以用这个函数,画到内存DC里,然后把内存DC的内容读出来就可以了。

发表者:jasonbiao

如果是画到窗口里就用StretchBlt  
  如果是将实际图像缩小,建议去搜搜  
  网上这种算法源代码还是比较少,dll到是不少

发表者:nwpulipeng

StretchBlt  
 

发表者:cnxiaohai

其实是不是黑白的都没关系啊。。。  
   
  BMP是位图啊,一个象素用八位二进制表示,而且是按照象素连续存放  
   
  再加上一些头尾信息而已  
   
  这样的话  
   
  我们只要把象素重写就好了

发表者:applebomb

对,重写BMP就可以了。按照BMP扫描行的方式,处理一行输出一行,该不会很耗内存。  
   
  黑白BMP信息后无调色版部分,一个像素1bit,那么行信息则一个byte含8个点的信息。  
   
  还有要注意的:  
   
  1.BMP规范是行byte长按照32位即4byte补齐。  
   
  2.BMP文件存放的行信息与显示的行信息是正好相反。但是是放大的方式,反正反着放也一样:),所以读取时不必倒过来从文件尾巴读,直接读一行缩放一行即可。  
 

发表者:zgy166

你可以借鉴一下下面程序的思路。该程序是缩放点阵字库用的,点阵字库相当于黑白两色BMP,只是没有BMP头。  
   
  int   Stretch_Bitmap(PFNT_BITMAP   Bmpsrc_p,   PFNT_BITMAP   DesBitmap_p)  
  {  
  int   x;  
  int   y;  
  int   in_x;  
  int   in_y;  
   
  unsigned   char*   p_in;  
  unsigned   char*   p_out;  
  unsigned   char   temp;  
  int   width_plus_in;  
  int   width_plus_out;  
   
  if   (!(Bmpsrc_p   &&   DesBitmap_p)   ||   !(Bmpsrc_p->BmpData   &&   DesBitmap_p->BmpData))  
  return   FALSE;  
   
  width_plus_in   =   Bmpsrc_p->pitch*8   -   Bmpsrc_p->Width;  
  width_plus_out   =   DesBitmap_p->pitch*8   -   DesBitmap_p->Width;  
   
  memset(DesBitmap_p->BmpData,   0,   DesBitmap_p->Size);  
   
  for(y=0;   y<   DesBitmap_p->Height;   y++)  
  {  
  for(x=0;   x   <   DesBitmap_p->Width;   x++)      
  {  
  in_x   =   pixel_map(x,   Bmpsrc_p->Width,   DesBitmap_p->Width);  
  in_y   =   pixel_map(y,   Bmpsrc_p->Height,   DesBitmap_p->Height);  
   
  p_in   =   (char*)Bmpsrc_p->BmpData   +   byte_offset(in_x,in_y,Bmpsrc_p->pitch);  
   
  temp   =   (*p_in   &   bit_mask(in_x))   ?   1   :   0;  
  p_out   =   (char*)DesBitmap_p->BmpData   +   byte_offset(x,   y,   DesBitmap_p->pitch);  
   
  if   (temp   ==   1)  
  *p_out   |=   bit_mask(x);  
  else  
  *p_out   &=   ~bit_mask(x);  
  }  
  }  
  return   TRUE;  
  }  
 


 

 
热门推荐笔记本: 戴尔笔记本
相关文章:
笔记本相关:
IT技术文章:
webmaster:popbb@126.com   最佳浏览:1024X768 MSIE
©2007 popbb.net All Rights Reserved