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