WP7开发系列——Windows Phone 7平台简单图像处理

上回说到开发环境搭建,这回说说WP7上简单的图像处理(我这跨度会不会太大了。。。)因为我现在主要的工作在图像处理和视频传输上,所以搭好开发环境后就直接搞图像了。

图像处理中最简单的莫过于灰度图处理,所以就以灰度处理为例说一下在WP7上我们要怎么做。

基本的思路是:加载彩色图像->获取每个像素点的R、G、B值->根据公式做灰度变换->新建灰度图并打点。

一、首先是加载彩色图像:
在WP7中我们可以使用<Image>控件,只要指定Source属性即可。

<Image>控件支持本地图像,比如使用项目资源文件,Source="/ImageProcessTest;component/Images/hua.jpg";

也支持网络上的图像,只要将Source指定到某个URL即可,比如"http://www.chenxupro.com/hua.jpg"。

当然我们也可以通过Image类去动态加载。

二、获取每个像素点的RGB值:
在WP7中有个重要的类WriteableBitmap,它可以帮助我们去访问图像的每个像素点。
它的构造函数是:public WriteableBitmap(UIElement element, Transform transform);
// 参数:
// element:
// 要在位图中呈现的所需元素。
// transform:
// 用户要在绘制到位图中之前的最后一步中应用到元素的变换。如果您希望位图将它的变换考虑在内,则这对于您特别有意义。此值可以为 null。

我们可以通过WriteableBitmap类的Pixels成员变量去获取表示位图2D纹理的数组,这个数组是按行优先排列的。

WriteableBitmap wb = new WriteableBitmap(image_IP, null);
int[] ImageData = wb.Pixels;

依次通过该数组,获取作为整数值的单个像素值,这些整数值计算为自左乘的 ARGB32:

int curColor = ImageData[i * wb.PixelWidth + j];

每个像素的RGB值可以这样获得:

byte RedValue = (byte)(curColor >> 16 & 0xFF);  //0xFF实际上没有意义!!!
byte GreenValue = (byte)(curColor >> 8 & 0xFF);
byte BlueValue = (byte)(curColor & 0xFF);

三、根据公式做灰度变换:

byte GrayValue = (byte)(RedValue * 0.299 + GreenValue * 0.587 + BlueValue * 0.114);

四、新建灰度图并打点:

新建灰度图处理空间:

WriteableBitmap wb_gray = new WriteableBitmap(wb.PixelWidth, wb.PixelHeight);

通过比特变换获得灰度值的整数表示:

byte[] GrayValueArr = new byte[4];
GrayValueArr[3] = 0xFF;  //0x00
GrayValueArr[2] = GrayValue;
GrayValueArr[1] = GrayValue;
GrayValueArr[0] = GrayValue;
int GrayPixel = BitConverter.ToInt32(GrayValueArr, 0); 

将灰度值赋值给灰度图像:

wb_gray.Pixels[i * wb.PixelWidth + j] = GrayPixel;

这样灰度变换就完成啦~

下面是效果图:

完整的工程代码可以到这里下载:

http://download.csdn.net/detail/chenxupro/4039004

原文链接:http://www.chenxupro.com/proxblog/?p=157

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值