图像处理

   图像处理是游戏中不可或缺的部分,也是一个比较庞杂的系统。他山之石,可以攻玉,经常看到他人的一些做法和思路,收益颇大,及时总结记录,并且温故而知新。

  在这里Silverlight C# 游戏开发:资源的处理,图像算法(二)看到一篇文章。仔细分析学习一下。

    首先如我们通常所做的,要取得Image的所有像素值,建立一个WB副本,WriteableBitmap wb = new WriteableBitmap(Image0.Source as BitmapSource);作者使用了这样一个办法,我觉得不错,简单的多。更改WB的时候有两种方法:

   (1)Array.Copy()利用数组的这个静态方法

   (2)虽然WB的Pixels属性是只读的,但仍然可以单独设置Pixels[i].

    接下来的事情就是要分析读取到的像素点,先把它转换成一个字节数组,使用 BitConverter.GetBytes()方法。然后去修改索引为 0,1,2 这三个数值,屏蔽掉任意两个,就会得到不同的通道。

  【0】 :Blue 【1】:Green 【2】:Red

 另外实验的结果,jpg和Png格式都能得到一样的结果。

    如果把三个通道的值设为一样,那么就得到了灰度图。 0.30r+0.59g+0.11b ,需要注意的是,每一个灰度图的权值是不一样的。

    如果要取得反相: 255 - 通道

    如果要去掉黑色背景:(pixelImg[3] = (byte)((pixelImg[0]+pixelImg[1]+pixelImg[2])/3);

 

posted @ 2010-05-07 15:11  向恺然  阅读(217)  评论(0编辑  收藏  举报

我必须说的是:我崇尚开源,但鄙视剽窃。本博客所有引用的图片,文章,和代码,均只作为研究学习使用,不作为商业应用。如果我无意中冒犯了您,请发消息留言,我将立即删除。