All articles| All Pictures| All Softwares| All Video| Go home page| Write articles| Upload pictures

Reading number is top 10 articles
优化php代码42种方法总结_[PHP教程]
全面理解javascript的caller,callee,call,apply概念_JavaScript技术_编程技术
几个比较有用的正则表达式_[PHP教程]
GridView每页添加不重新开始序号列_[Asp.Net教程]
Delphi执行sql server区间查询
使用MD5变换算法来防止穷举破译密码_[Asp.Net教程]
SQL,Server中发送邮件的新方式_[SQL,Server教程]
AJAX使用技巧:如何处理书签和翻页按扭_.net资料_编程技术
.NET,3.x新特性之Lambda表达式_.net资料_编程技术
跟我学SQL:(八)数值数据类型_mssql学习_编程技术
Reading number is top 10 pictures
锄禾日了几个人?
你是左脑型还是右脑型
2012 national geographic daily picture8
星星命名法则
In the world the most mysterious 21 place landscape3
Sora aoi possession of boudoir2
Take you to walk into the most true north Korea rural1
胸部遭到偷窥的女人们
The real super beauty14
奇趣的世界记录1
Download software ranking
网络管理员第三版
Boxer's Top ten classic battle5
功夫熊猫2(上集)
Unix video tutorial9
Macromedia Dreamweaver 8
JSP+Ajax Web development typical examples
金山office2007
Adobe Flash Player(IE) 10.0.32.18 浏览器专用的FLASH插件
变速齿轮3.26
SP3 for SQL2000
aaa published in(发表于) 2013/12/6 10:26:31 Edit(编辑)
了解Hibernate的FlushMode.NEVER_.net资料_编程技术

了解Hibernate的FlushMode.NEVER_.net资料_编程技术

了解Hibernate的FlushMode.NEVER_.net资料_编程技术-数科优化网
  很多图片处理的算法从原理上讲其实非常简单,难点往往在如何去写算法实现它,更加难的就是如何去优化实现的算法。虽说我一向认为程序员的效率比程序的效率更重要,但为了等处理一张自己拍摄的数码照片,溜出去买杯奶茶顺便再买张彩票回来发现还没算好,无论如何都是不能忍受的。

  马赛克算法很简单,说白了就是把一张图片分割成若干个val * val像素的小区块(可能在边缘有零星的小块,但不影响整体算法),每个小区块的颜色都是相同的。为了方便起见,我们不妨让这个颜色就用该区域最左上角的那个点的颜色。当然还可以有其他方法,比如取区块中间点的颜色,或区块中随机点的颜色作代表等等。 下面的示意图就是取val=2的结果。

  原图像素

ABCDEFG
HIJKLMN
OPQRSTU
VWXYZ01
2345678

  马赛克处理后:

AACCEEG
AACCEEG
OOQQSSU
OOQQSSU
2244668

  原理就是那么简单。具体实现就看各人的思维习惯了。我的想法是:

  当y(当前高度)是val的整数倍时:

  扫描当前行中的每一点x,如果x也是val的整数倍,记录下当前x,y的颜色值;如果x不是val的整数倍,则沿用最近一次被记录的颜色值。

  当y不是val的整数倍:

  很简单,直接复制上一行。

  简单的说就是以线带面,最终实现让大家都看不清楚

  下面就是源代码。写算法不是我的强项,不过偶尔勉为其难的写个可以跑跑的不求甚解版还是可以做到的,不指望可以帮到你,只希望没有误导你。


public static Bitmap KiMosaic(Bitmap b, int val)
{
 if (b.Equals(null))
 {
  return null;
 }

 int w = b.Width;
 int h = b.Height;

 int stdR, stdG, stdB;

 stdR = 0;
 stdG = 0;
 stdB = 0;

 BitmapData srcData = b.LockBits(new Rectangle(0, 0, w, h), ImageLockMode.ReadWrite, PixelFormat.Format24bppRgb);

 unsafe
 {
  byte* p = (byte*)srcData.Scan0.ToPointer();
  for (int y = 0; y < h; y++)
  {
   for (int x = 0; x < w; x++)
   {
    if (y % val == 0)
    {
     if (x % val == 0)
     {
      stdR = p[2]; stdG = p[1]; stdB = p[0];
     }
     else
     {
      p[0] = (byte)stdB;
      p[1] = (byte)stdG;
      p[2] = (byte)stdR;
     }
    }
    else
    {
     // 复制上一行
     byte * pTemp = p - srcData.Stride;

     p[0] = (byte)pTemp[0];
     p[1] = (byte)pTemp[1];
     p[2] = (byte)pTemp[2];
    }
    p += 3;
   } // end of x
   p += srcData.Stride - w * 3;
  } // end of y
  b.UnlockBits(srcData);
 }
 return b;
}




添加到del.icio.us 添加到新浪ViVi 添加到百度搜藏 添加到POCO网摘 添加到天天网摘365Key 添加到和讯网摘 添加到天极网摘 添加到黑米书签 添加到QQ书签 添加到雅虎收藏 添加到奇客发现 diigo it 添加到饭否 添加到飞豆订阅 添加到抓虾收藏 添加到鲜果订阅 digg it 貼到funP 添加到有道阅读 Live Favorites 添加到Newsvine 打印本页 用Email发送本页 在Facebook上分享


Disclaimer Privacy Policy About us Site Map

If you have any requirements, please contact webmaster。(如果有什么要求,请联系站长)
Copyright ©2011-
uuhomepage.com, Inc. All rights reserved.