化妆包厂家
免费服务热线

Free service

hotline

010-00000000
化妆包厂家
热门搜索:
行业资讯
当前位置:首页 > 行业资讯

WindowsPhone开发技巧照片角度处理

发布时间:2020-01-14 20:04:03 阅读: 来源:化妆包厂家

第1页Windows Phone开发技巧:照片角度处理在Windows phone实际项目中,可能需要用户从相册中选择图片然后进行相应的处理。但是不知道大家有没有发现这样一种情况,就是手机里看是竖着的,但是上传到微博或者哪里的时候确实横着的。一种情况是你拿手机竖着拍照得话,照片就是横着的,虽然在手机里看是竖着的。(可能有点抽象,遇到此情况的同学应该深有感触)

那么我们在客户端中应该如何处理这种情况呢?一种想法是获取图片的角度,如果是90°,就把照片翻转过来,再进行相应的操作。那这样就涉及到2个问题

1. 如何获取相册中照片的角度

2. 如何翻转已有的照片(流、或者Bitmap或者WriteableBitmap)

查看了系统的API,并没有对相片的角度提供支持,但是我们可以使用ExifLib开源库去做。

下述的方法就是获取选取图片的角度的

///

/// get angle of photo

///

/// photo stream

/// photo name

/// angle of the photo

public static int GetAngle(Stream stream, string filename)

ifOrientation _orientation;

int _angle = 0;

sition = 0;

JpegInfo info = adJpeg(stream, filename);

if (info!=null)

_orientation = ientation;

switch (ientation)

case pLeft:

case defined:

_angle = 0;

break;

case pRight:

_angle = 90;

break;

case ttomRight:

_angle = 180;

break;

case ttomLeft:

_angle = 270;

break;

return _angle;

获取到角度后,如果角度是90°,即是反的,我们需要将其纠正过来,可以使用如下的方法:

private Stream RotateStream(Stream stream, int angle)

sition = 0;

if (angle % 90 != 0 || angle

if (angle % 360 == 0) return stream;

BitmapImage bitmap = new BitmapImage();

tSource(stream);

WriteableBitmap wbSource = new WriteableBitmap(bitmap);

WriteableBitmap wbTarget = null;

if (angle % 180 == 0)

wbTarget = new WriteableBitmap(xelWidth, xelborder="1" Height);

else

wbTarget = new WriteableBitmap(xelborder="1" Height, xelWidth);

for (int x = 0; x

for (int y = 0; y

switch (angle % 360)

case 90:

xels[(xelborder="1" Height - y - 1) + x * xelWidth] = xels[x + y * xelWidth];

break;

case 180:

xels[(xelWidth - x - 1) + (xelborder="1" Height - y - 1) * xelWidth] = xels[x + y * xelWidth];

break;

case 270:

xels[y + (xelWidth - x - 1) * xelWidth] = xels[x + y * xelWidth];

break;

MemoryStream targetStream = new MemoryStream();

veJpeg(targetStream, xelWidth, xelborder="1" Height, 0, 100);

return targetStream;

}

网上挂号收取服务费

预约挂号中心

网上挂号预约系统