WP7开发系列——Windows Phone 7平台简单图像处理
2012-02-26 20:09
369 查看
转载自:http://www.chenxupro.com/proxblog/?p=157
by chenxupro Posted on 2012 年 2 月 1 日
上回说到开发环境搭建,这回说说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);
将灰度值赋值给灰度图像:1 wb_gray.Pixels[i * wb.PixelWidth + j] = GrayPixel;
这样灰度变换就完成啦~
下面是效果图:
by chenxupro Posted on 2012 年 2 月 1 日
上回说到开发环境搭建,这回说说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);
将灰度值赋值给灰度图像:1 wb_gray.Pixels[i * wb.PixelWidth + j] = GrayPixel;
这样灰度变换就完成啦~
下面是效果图:
相关文章推荐
- WP7开发系列——Windows Phone 7平台简单图像处理
- 图像处理基础知识系列之五:贝叶斯方法简单梳理
- MSDN Webcast - Silverlight for Windows Phone 开发系列课程(1):Windows Phone平台概况
- 【VS开发】【图像处理】直方图均衡与平台直方图
- 全中文演示,从Windows Phone 7开发平台搭建,到建立第一个WP7程序
- DM642开发板:SSD-DM642 Ver2.0四路实时图像处理开发平台
- Windows Phone 7(WP7)开发 “后退按键” 与 “在OnNavigationTo中处理QueryString”
- 在windowsXP系统中使用Eclipse开发Android动态库so(二):简单图像处理so
- NEON在S2平台图像处理中的简单应用
- WP7开发系列——Windows Phone 7 开发环境搭建
- 国庆学WP7系列第二季--你必须知道的Windows Phone 7开发
- 图像处理基础知识系列之三:霍夫变换简单梳理
- 图像处理基础知识系列之四:最大似然和EM(期望最大化)算法简单梳理
- 基于MATLAB GUI的图像处理软件平台的开发(转自深寒的博客)
- 简单天气开发系列(一)——项目整体思路
- Android官方开发文档Training系列课程中文版:键盘输入处理之处理键盘按键
- 操作系统开发系列—13.b.进程之丰富中断处理程序
- 图像处理之简单脸谱检测算法(Simple Face Detection Algorithm)
- 图像处理之基础---opencv 开发的环境搭建
- Linux平台下基于BitTorrent应用层协议的下载软件开发--出错处理模块(bterror.h)