You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

92 lines
2.8 KiB
C#

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;
using System.Windows.Media.Imaging;
using System.Windows.Media;
using System.Drawing;
namespace WpfPdfReader
{
public class ImageSourceHelper
{
public static ImageSource ImageToSource(System.Drawing.Image image)
{
if (image == null)
return null;
using (MemoryStream imgStream = new MemoryStream())
{
image.Save(imgStream, System.Drawing.Imaging.ImageFormat.Png);
ImageSource imgsrc = BytesToBitmapImage(imgStream.ToArray());
return imgsrc;
}
}
public static System.Drawing.Image SourceToImage(ImageSource imageSource)
{
byte[] imageBytes = BitmapImageToBytes(imageSource);
return ImageHelper.ReadImage(imageBytes);
}
public static System.Drawing.Image SourceToImage(Stream streamSource)
{
if (streamSource != null)
{
Image img = Image.FromStream(streamSource);
return img;
}
else
return null;
}
public static byte[] BitmapImageToBytes(ImageSource imageSource)
{
BitmapImage bmp = imageSource as BitmapImage;
byte[] byteArray = null;
try
{
Stream sMarket = bmp.StreamSource;
if (sMarket != null && sMarket.Length > 0)
{
sMarket.Position = 0;
BinaryReader br = new BinaryReader(sMarket);
byteArray = new byte[sMarket.Length];
int i = br.Read(byteArray, 0, byteArray.Length);
//MemoryStream ms = sMarket as MemoryStream;
//byteArray = ms.ToArray();
}
else
{
Uri url = bmp.UriSource;
System.Drawing.Image image = System.Drawing.Image.FromFile(url.LocalPath);
//image.Save(@"d:\test.jpg");
byteArray = ImageHelper.ImageToBytes(image);
}
}
catch
{
//other exception handling
}
return byteArray;
}
public static BitmapImage BytesToBitmapImage(byte[] byteArray)
{
BitmapImage bmp = null;
try
{
bmp = new BitmapImage();
bmp.BeginInit();
bmp.StreamSource = new MemoryStream(byteArray);
bmp.EndInit();
}
catch
{
bmp = null;
}
return bmp;
}
}
}