我已经花费了最近10-12小时的时间来尝试在C#中编写一个正在开发的Windows Store应用程序中,正确地缩小下载的Web图像的大小和像素。无论我做什么,最终的图像上都会出现伪影,比如“半张图片”,灰色/同色区域等。就好像流还没有被正确刷新一样,尽管我相信我已经这样做了(因为下面的代码可以正常工作...)。以下是我检索图像的方法 - 此部分有效,但包括在此处以确保所有信息都在此处(请参见下面的代码):
1. 获取图像的URL 2. 使用HttpWebRequest获取响应 3. 创建流以获取响应流 4. 创建空StorageFile并打开进行写入 5. 将响应流复制到存储文件中。 6. 关闭所有内容
从那里开始,我需要做以下事情:
1. 确定大小(例如使用BitmapDecoder) 2. 如果图像的宽度超过一定量(例如700像素),则必须调整大小。 3. 无论如何,文件总是太大,需要进一步压缩 4. 图像需要以jpg格式保存,并将图像质量设置为中等/半高水平。
我尝试了许多方法,包括与BitmapEncoder / BitmapDecoder混合处理,但无论如何,我仍然得到了半处理的图像。请问是否有人能帮我找到正确的压缩和调整图像大小的方法?
我的代码处于当前状态:
1. 获取图像的URL 2. 使用HttpWebRequest获取响应 3. 创建流以获取响应流 4. 创建空StorageFile并打开进行写入 5. 将响应流复制到存储文件中。 6. 关闭所有内容
从那里开始,我需要做以下事情:
1. 确定大小(例如使用BitmapDecoder) 2. 如果图像的宽度超过一定量(例如700像素),则必须调整大小。 3. 无论如何,文件总是太大,需要进一步压缩 4. 图像需要以jpg格式保存,并将图像质量设置为中等/半高水平。
我尝试了许多方法,包括与BitmapEncoder / BitmapDecoder混合处理,但无论如何,我仍然得到了半处理的图像。请问是否有人能帮我找到正确的压缩和调整图像大小的方法?
我的代码处于当前状态:
using (var response = await HttpWebRequest.CreateHttp(internetUri).GetResponseAsync())
{
using (var stream = response.GetResponseStream())
{
var imageFolder = await localFolder.CreateFolderAsync(
CachedImagesFolderEndFolderPath, CreationCollisionOption.OpenIfExists);
string fileName = string.Format("{0}.jpg",
Path.GetFileNameWithoutExtension(Path.GetRandomFileName()));
var file = await imageFolder.CreateFileAsync(fileName,
CreationCollisionOption.ReplaceExisting);
using (var filestream = await file.OpenStreamForWriteAsync())
{
await stream.CopyToAsync(filestream);
}
}
}