积极答复者
对图片就行裁剪,提示分配的缓存区不足

问题
-
IRandomAccessStream tx = await ImageFile.OpenAsync(FileAccessMode.Read);
Stream stream = WindowsRuntimeStreamExtensions.AsStreamForRead(tx.GetInputStreamAt(0));
MemoryStream ms = new MemoryStream();
await stream.CopyToAsync(ms);
byte[] bytes = ms.ToArray();BitmapEncoder en = await BitmapEncoder.CreateAsync(BitmapEncoder.JpegEncoderId, tx);
en.SetPixelData(BitmapPixelFormat.Bgra8, BitmapAlphaMode.Ignore, 960, 1280, DisplayInformation.GetForCurrentView().LogicalDpi, DisplayInformation.GetForCurrentView().LogicalDpi, bytes);
代码如上,不知道为何会抛出 提示分配的缓存区不足的提示
StorageFile Thumbanil = await Image_ThumbNail.CreateFileAsync(ImageFile.Name, CreationCollisionOption.ReplaceExisting);//创建文件,并以原图的名字作为名字
using (IRandomAccessStream Istream = await Thumbanil.OpenAsync(FileAccessMode.ReadWrite))//写入的相关事宜
{
BitmapEncoder en = await BitmapEncoder.CreateAsync(BitmapEncoder.JpegEncoderId,Istream);
en.SetPixelData(BitmapPixelFormat.Rgba8, BitmapAlphaMode.Ignore, (uint)960, (uint)1280, DisplayInformation.GetForCurrentView().LogicalDpi, DisplayInformation.GetForCurrentView().LogicalDpi, bytes);
await en.FlushAsync();
stream.Dispose();2016年7月22日 16:05
答案
全部回复
-
改了代码
添加 解码
BitmapDecoder bw = await BitmapDecoder.CreateAsync(BitmapDecoder.JpegDecoderId, tx);
var tt = await bw.GetPixelDataAsync();
“BitmapEncoder en = await BitmapEncoder.CreateAsync(BitmapEncoder.JpegEncoderId,Istream);
en.SetPixelData(BitmapPixelFormat.Rgba8, BitmapAlphaMode.Ignore, (uint)960, (uint)1280, DisplayInformation.GetForCurrentView().LogicalDpi, DisplayInformation.GetForCurrentView().LogicalDpi, bytes);“这个地方也改成:
en.SetPixelData(bw.BitmapPixelFormat ,bw.BitmapAlphaMode, 960, 1280, DisplayInformation.GetForCurrentView().LogicalDpi, DisplayInformation.GetForCurrentView().LogicalDpi,tt.DetachPixelData());“
也成功的运行了,但是运行出来的图片超级怪异..
有没有比计较的好的办法,修改图片的大小?
2016年7月23日 15:23 -
我先是获取了图片文件的略缩图,并且保存了下来。(图片文件显示很正常,但是竖着的图片,在略缩图的显示下就会变自动逆时针选择90.横图则不会出现旋转的情况),这算是解决了图片大小的问题
之后,我对略缩图使用了BitmapTransform这方法,设置顺时针旋转90,但是这个样子经常会出现,花图(就是我上传)
旋转的图片也是 莫名其妙的,有的是旋转180,但就是不会旋转90....,如果设置其他参数,高度和获取略缩图的参数一样,宽度自定,再加上旋转的参数,出现花的几率很大。 (手机是830)
缩小是都无所谓,通过BitmapTransform,还是BitmapEncoder,或者是略缩图,只要设置好都会出现,但是啊,这个自动旋转是怎么回事嘛。。。BitmapTransform的旋转参数即便设置为顺时针90°,图片也不会真的旋转90...而是180°..
2016年7月24日 15:15 -
多谢了
对于这个图片自动旋转,我在电脑上(win10)查看这个这个图片(和手机上旋转的图片相同),也是发生了自动旋转
对于EXIF的数据,我选择的“EXIF 方向标志被忽略”
同样是不好使。
不过很有意思的是,在相同的Image控件下,使用原图,是不会出现旋转的.使用略缩图则会,使用BitmapTransform直接的修改也会出现,但是使用BitmapTransform修改的图片有很几率出现花图。
不过,手机竖着拍摄的照片,有一定的几率出现不旋转(妈的,比中彩票的几率能大点)。不过当把图片缩小到一定程度时,旋转是可以避免的,比如100/200这种超级小的图片,但是图片会变得很模糊。
不知道有没有一种可能是,我的Image控件没有设定具体的大小。是使用自动AUTO,所以图片就会这样旋转?
当然这些目前都不是最主要的,最主要的是我的VS识别不了的我的手机了, 无法具体上机实验。而是用手机模拟器,有没饭办法拍摄图片...真是日乐购。。
VS2013 不能部署WP8.1到手机上
- 已编辑 ARM830 2016年7月26日 9:17
2016年7月26日 9:16 -
今天我把电脑重置了。可算是可以部署到手机上了。
我又重写BitmapTransform,这部分代码,忽略EXIF的旋转方向,发现可以旋转了。
但是吧,发现个问题,发生自旋转的是手机本身手机拍摄的照片,或者说3480*2160的照片,于是我就做了个排除法,只要是这个格式的照片都统统旋转。
照片旋转本身,对APP体验上是很不好的,我就先对这个3480*2160做旋转处理,等用户自己发现一些照片会旋转后,在做具体处理了。
目前,就就只能对3480*2160的照片做旋转和加上旋转的Button,如果对有旋转的照片,用户自己旋转....
这几天,你帮我找了这么的资料,我也是学习很多,谢谢。
2016年7月27日 3:29