【发布时间】:2011-06-29 09:13:58
【问题描述】:
在我的应用程序中,我正在接受来自用户的图像。如果图像超过指定大小,那么我将缩小到适当的大小并保存在数据库中。我正在使用FJCore 库来缩放图像。该库适用于 JPEG 图像。但它不支持PNG图像。图书馆似乎最近没有更新。知道如何在 Silverlight 中做到这一点吗?
【问题讨论】:
标签: silverlight-4.0 png image-scaling
在我的应用程序中,我正在接受来自用户的图像。如果图像超过指定大小,那么我将缩小到适当的大小并保存在数据库中。我正在使用FJCore 库来缩放图像。该库适用于 JPEG 图像。但它不支持PNG图像。图书馆似乎最近没有更新。知道如何在 Silverlight 中做到这一点吗?
【问题讨论】:
标签: silverlight-4.0 png image-scaling
您可以做的是创建一个新的 Image 元素并将其源设置为从流中创建的可写位图,但不要将此 Image 元素添加到可视化树中。创建另一个您想要的最终大小的 WriteableBitmap,然后在此 WriteableBitmap 上调用 render,传递 Image 元素和 ScaleTransform 以将图像调整为适当的大小。然后,您可以使用第二个 WriteableBitmap 作为第二个 Image 元素的源并将其添加到可视化树中。
【讨论】:
我使用 WriteableBitmapEx 项目来实现这一点。如果有人需要,这里是代码。
private void ShowCustomImageButton_Click(object sender, RoutedEventArgs e)
{
OpenFileDialog openDialog = new OpenFileDialog();
openDialog.Multiselect = false;
openDialog.Filter = "PNG Files|*.PNG";
bool? userClickedOK = openDialog.ShowDialog();
if (userClickedOK == true)
{
BitmapImage image = new BitmapImage();
// get image that user has selected.
image.SetSource(openDialog.File.OpenRead());
WriteableBitmap wrtbmp = new WriteableBitmap(image);
// resize image if needed.
wrtbmp = wrtbmp.Resize(64, 64, WriteableBitmapExtensions.Interpolation.NearestNeighbor);
var img = wrtbmp.ToImage();
// convert image into file stream.
Stream filestram = img.ToStream();
filestram.Position = 0;
using (filestram)
{
// convert file stream into memory stream.
var memoryStream = new MemoryStream();
byte[] aryBuffer = new byte[16384];
int nRead = filestram.Read(aryBuffer, 0, aryBuffer.Length);
while (nRead > 0)
{
memoryStream.Write(aryBuffer, 0, nRead);
nRead = filestram.Read(aryBuffer, 0, aryBuffer.Length);
}
// use following line to convert in bytes and save into database.
memoryStream.ToArray();
imgCustomImage.Source = CreateBitmapImage(memoryStream);
}
}
}
private BitmapImage CreateBitmapImage(MemoryStream memoryStream)
{
if ((memoryStream == null) || (memoryStream.Length == 0))
return null;
var image = new BitmapImage();
image.SetSource(memoryStream);
return image;
}
【讨论】: