图片旋转算法
来源:互联网 发布:大数据案例分析有哪些 编辑:程序博客网 时间:2024/06/09 19:27
本文为转载文章,但是希望更多的朋友来优化该算法。
转载地址:http://www.cnblogs.com/ice6/archive/2010/08/19/rotating-an-image-in-silverlight-without-cropping.html
旋转算法如下:
Rotation[degrees counterclockwise]Subscript Manipulation using Pixels0Out[i, j] = In[i, j]90Out[j, Right-i-1] = In[i, j]180Out[Right-i-1, Bottom-j-1] = In[i, j]270Out[Bottom-j-1,i] = In[i, j]i代表x轴的值,j代表Y轴上的值
private
WriteableBitmap WBRotate(WriteableBitmap wb,
int
CounterclockwiseAngle)
{
int
[,] wb_arr =
new
int
[wb.PixelWidth, wb.PixelHeight];
//导致许多缺页中断的初始化循环
//for (int r = 0; r < wb.PixelHeight; r++)// r=row c=column
//{
// for (int c = 0; c < wb.PixelWidth; c++)
// {
// wb_arr[c, r] = wb.Pixels[wb.PixelWidth * r + c];
// }
//}
//导致较少缺页中断的初始化循环 对上面代码的简单优化
for
(
int
c = 0; c < wb.PixelWidth; c++)
// r=row c=column
{
for
(
int
r = 0; r < wb.PixelHeight; r++)
{
wb_arr[c, r] = wb.Pixels[wb.PixelWidth * r + c];
}
}
WriteableBitmap wb2;
int
[,] wb_arr_2;
if
(CounterclockwiseAngle == 0 || CounterclockwiseAngle == 360 || CounterclockwiseAngle == -360)
//0度 360度
{
wb2 =
new
WriteableBitmap(wb.PixelWidth, wb.PixelHeight);
wb_arr_2 =
new
int
[wb.PixelWidth, wb.PixelHeight];
wb_arr_2 = wb_arr;
}
else
if
(CounterclockwiseAngle == 90 || CounterclockwiseAngle == -270)
//90 -270//Math.Sin(
{
wb2 =
new
WriteableBitmap(wb.PixelHeight, wb.PixelWidth);
wb_arr_2 =
new
int
[wb.PixelHeight, wb.PixelWidth];
for
(
int
c = 0; c < wb_arr.GetLength(0); c++)
//width i
{
for
(
int
r = 0; r < wb_arr.GetLength(1); r++)
//height j
{
wb_arr_2[r, wb_arr.GetLength(0) - c - 1] = wb_arr[c, r];
//90 Out[j, Right-i-1] = In[i, j] Right代表真个宽度
}
}
}
else
if
(CounterclockwiseAngle == 180 || CounterclockwiseAngle == -180)
//180 -180
{
wb2 =
new
WriteableBitmap(wb.PixelWidth, wb.PixelHeight);
wb_arr_2 =
new
int
[wb.PixelWidth, wb.PixelHeight];
for
(
int
c = 0; c < wb_arr.GetLength(0); c++)
//width i
{
for
(
int
r = 0; r < wb_arr.GetLength(1); r++)
//height j
{
wb_arr_2[wb_arr.GetLength(0) - c - 1, wb_arr.GetLength(1) - r - 1] = wb_arr[c, r];
//180 Out[Right-i-1, Bottom-j-1] = In[i, j]
}
}
}
else
if
(CounterclockwiseAngle == 270 || CounterclockwiseAngle == -90)
//270 -90
{
wb2 =
new
WriteableBitmap(wb.PixelHeight, wb.PixelWidth);
wb_arr_2 =
new
int
[wb.PixelHeight, wb.PixelWidth];
for
(
int
c = 0; c < wb_arr.GetLength(0); c++)
//width i
{
for
(
int
r = 0; r < wb_arr.GetLength(1); r++)
//height j
{
wb_arr_2[wb_arr.GetLength(1) - r - 1, c] = wb_arr[c, r];
//270 Out[Bottom-j-1,i] = In[i, j]
}
}
}
else
{
return
null
;
//如果是其他角度 就直接返回null
}
//将二位数组转换成Pixels
for
(
int
r = 0; r < wb_arr_2.GetLength(1); r++)
// r=row c=column
{
for
(
int
c = 0; c < wb_arr_2.GetLength(0); c++)
{
wb2.Pixels[wb2.PixelWidth * r + c] = wb_arr_2[c, r];
}
}
return
wb2;
}
- 图片旋转算法
- OPENCV3.0图片旋转算法
- 图片顺时针旋转90度的算法
- 顺时针旋转图片90度(算法)
- 图片旋转
- 图片旋转
- 旋转图片
- 图片旋转
- 图片旋转
- 旋转图片
- 旋转图片
- 图片旋转
- 图片旋转
- 图片旋转
- 图片旋转
- 图片旋转
- 图片旋转
- 图片旋转
- new和delete数组类型
- 【Android面试】Android面试题集锦
- Java容器之Comparable接口的使用
- Android本地缓存和远程图片获取的实现
- 使用Java使用数据结构中的单链表
- 图片旋转算法
- HashMap,LinkedHashMap,TreeMap的区别
- Windows Phone 7 – Browsing your Photos via Bing Maps
- 初看MFC的一些体会。
- ubuntu摆脱webqq体验QQ2012
- debian 的网络安装
- SysFader:iexplorer.exe应用程序错误
- 用批处理写MySql的数据备份与还原
- 新云CMS网站内容管理系统生成HTML静态化教程