wpf 中的imge和drawing 中的iamge相互转换
public class ImageHelper {
private static List<string> allowableFileTypes = new List<string>();
static ImageHelper() {
allowableFileTypes.Clear();
allowableFileTypes.Add(".jpg");
allowableFileTypes.Add(".jpeg");
allowableFileTypes.Add(".bmp");
allowableFileTypes.Add(".png");
allowableFileTypes.Add(".tif");
allowableFileTypes.Add(".tiff");
allowableFileTypes.Add(".gif");
allowableFileTypes.Add(".wmp");
}
#region << _helper method >>
public static bool SaveImageOnDisk(String originalUrl, String filename, out String errorMessage) {
try {
WebClient client = new WebClient();
byte[] buffer = client.DownloadData(originalUrl);
client.Dispose();
//文件后缀名
string extension = filename.LastIndexOf(".") > -1 ?
filename.Substring(filename.LastIndexOf(".")) : ".jpg";
//是否在默认值中存在
if (!allowableFileTypes.Contains(extension)) {
errorMessage = "The file type you picked is not supported/r/n" +
"Or you didn't enter a file extension, please retry";
return false;
}
BitmapSource imageSource = CreatImage(buffer, 0, 0);
byte[] encodedBytes = GetEncodedImageData(iamgeSource, extension);
SaveImageData(encodedBytes, filename);
errorMessage = String.Empty;
return true;
}
catch (Exception ex) {
errorMessage = ex.Message;
return false;
}
}
/// <summary>
/// 将图片保存到本地
/// </summary>
/// <param name="data"></param>
/// <param name="fileName"></param>
public static void SaveImageData(byte[] data, string fileName) {
FileStream stream = new FileStream(fileName, FileMode.Create, FileAccess.Write);
BinaryWriter bw = new BinaryWriter(stream);
bw.Write(data);
bw.Close();
stream.Close();
}
public static BitmapSource CreatImage(byte[] data, int decodePixelWidth, int decodePixelHeight) {
if (data == null) return null;
BitmapImage result = new BitmapImage();
result.BeginInit();
if (decodePixelWidth > 0) {
result.DecodePixelWidth = decodePixelWidth;
}
if (decodePixelHeight > 0) {
result.DecodePixelHeight = decodePixelHeight;
}
result.StreamSource = new MemoryStream(data);
result.CreateOptions = BitmapCreateOptions.None;
result.CacheOption = BitmapCacheOption.Default;
result.EndInit();
return result;
}
public static byte[] GetEncodedImageData(ImageSource image, String preferredFormat) {
byte[] result = null;
//图片解码器
BitmapEncoder encoder = null;
switch (preferredFormat.ToLower()) {
case ".jpg":
case ".jpeg":
encoder = new JpegBitmapEncoder();
break;
case ".bmp":
encoder = new BmpBitmapEncoder();
break;
case ".png":
encoder = new PngBitmapEncoder();
break;
case ".tif":
case ".tiff":
encoder = new TiffBitmapEncoder();
break;
case ".gif":
encoder = new GifBitmapEncoder();
break;
case ".wmp":
encoder = new WmpBitmapEncoder();
break;
}
if (image is BitmapSource) {
MemoryStream stream = new MemoryStream();
encoder.Frames.Add(BitmapFrame.Create(image as BitmapSource));
encoder.Save(stream);
stream.Seek(0, SeekOrigin.Begin);
result = new byte[stream.Length];
BinaryReader br = new BinaryReader(stream);
br.Read(result, 0, (int)stream.Length);
br.Close();
stream.Close();
}
return result;
}
#endregion
}s