【发布时间】:2016-05-31 12:07:54
【问题描述】:
我有这个方法,我想从磁盘加载一张图片,然后将其调整为较小的大小并将其保存到字节数组中,以保存到mysql表中的blob中。据我所知,它正在调整大小,但是当我将其保存到表中时,我可以看到字节数组是原始文件大小。但我只想将缩略图保存在表格中。
/// <summary>
/// Load and resize image into a byte array.
/// </summary>
/// <param name="bitmap"></param>
/// <param name="FileName"></param>
/// <param name="Width"></param>
/// <param name="Height"></param>
/// <returns></returns>
public Byte[] LoadImageInToByteArray(string FileName, int Width, int Height)
{
BitmapImage bitmap = new BitmapImage();
System.IO.FileStream photoStream = new System.IO.FileStream(FileName, System.IO.FileMode.Open, System.IO.FileAccess.Read, System.IO.FileShare.Read);
bitmap.BeginInit();
bitmap.StreamSource = photoStream;
bitmap.CacheOption = BitmapCacheOption.OnLoad;
bitmap.DecodePixelHeight = Height;
bitmap.DecodePixelWidth = Width;
byte[] buffer = BufferFromImage(bitmap);
bitmap.EndInit();
return buffer;
}
/// <summary>
/// Convert BitImage into Byte Array.
/// </summary>
/// <param name="imageSource"></param>
/// <returns></returns>
public Byte[] BufferFromImage(BitmapImage imageSource)
{
byte[] result = null;
if (imageSource != null)
{
using (MemoryStream memStream = new MemoryStream())
{
JpegBitmapEncoder encoder = new JpegBitmapEncoder();
encoder.Frames.Add(BitmapFrame.Create(imageSource));
encoder.Save(memStream);
result = memStream.ToArray();
}
}
return result;
}
这个函数被这一行调用:
yelloDataSet.EmployeesPicture[index].Picture =
helperClass.LoadImageInToByteArray(helperClass.OpenFileDialogSingle("Abrir Imaginen."),150,150);
我在这里错过了什么?
【问题讨论】:
-
BufferFromImage() ?如果是,那么它可能没有使用新的位图宽度或高度,而是底层流正在一对一复制。
-
尝试在
BufferFromImage()之前调用EndInit()。 -
这给了我一个空的 Byte[] ...
-
不,它以前不起作用,它返回未修改的字节流。我猜你必须打电话给
EndInit()。问题是为什么字节数组是空的。你叫什么空?是null还是Length == 0?此外,您没有确认BufferFromImage()方法的外观(可能值得将其纳入问题)。 -
我会将 BufferFromImage 添加到问题中。来自调试器:缓冲区 {byte[0]} byte[]