windowsphone7下图片格式的转换

windowsphone7和siverlight中的BitmapImage和Image提供的接口还是很比较大的区别的,总体来说siverlight的封装性更加健全一些。

同时在压缩bitmap的时候,siverlight会提供设置和访问图像dpi(dots per inch)和pixel的函数,但是wp7中只能访问和操作pixel。这样的话在wp7下,对于压缩一张图片来说,你可以很方便增加或减少像素,但是却很难访问它的dpi,那么图片的实际宽度和高度就很难定制了。

下面是对图片和文件流格式的一个转换类,可以参考一下:

    public class ImageUtil
    {
        /// <summary>
        /// 将Image转换成二进制流
        /// </summary>
        /// <param name="sourceImage"></param>
        /// <returns></returns>
        public static byte[] ImageToByteArray(Image sourceImage)
        {
            return ImageSourceToByteArray(sourceImage.Source);
        }

        /// <summary>
        /// 将ImageSource转换成二进制流
        /// </summary>
        /// <param name="sourceImage"></param>
        /// <returns></returns>
        public static byte[] ImageSourceToByteArray(ImageSource source)
        {
            BitmapSource bs = (BitmapSource)source;
            using (MemoryStream ms = new MemoryStream())
            {
                WriteableBitmap writeableBitmap = new WriteableBitmap(bs);
                Extensions.SaveJpeg(writeableBitmap, ms, bs.PixelWidth, bs.PixelHeight, 0, 100);
                return ms.GetBuffer();
            }
        }

        /// <summary>
        /// 将二进制流转换为Image格式图片
        /// </summary>
        /// <param name="bitData"></param>
        /// <returns></returns>
        public static Image ByteArrayToImage(byte[] bitData)
        { 
            Image image = new Image();
            image.Source = ByteArrayToBitmapImage(bitData);
            return image;
        }

        /// <summary>
        /// 将二进制流转换为BitmapImage格式图片
        /// </summary>
        /// <param name="bitData"></param>
        /// <returns></returns>
        public static BitmapImage ByteArrayToBitmapImage(byte[] bitData)
        {
            BitmapImage bitmap = new BitmapImage();
            using (MemoryStream ms = new MemoryStream(bitData))
            {
                bitmap.CreateOptions = BitmapCreateOptions.DelayCreation;
                bitmap.SetSource(ms);
                return bitmap;
            }
        }

        /// <summary>
        /// 将流数据写入jpeg文件
        /// </summary>
        /// <param name="stream"></param>
        /// <param name="fileDirectory"></param>
        /// <param name="filename"></param>
        /// <param name="targetWidth"></param>
        /// <param name="targetHeight"></param>
        public static void WriteStreamObjectToJPEG(Stream stream, string fileDirectory,string filename, int targetWidth, int targetHeight)
        {
            using (IsolatedStorageFile store = IsolatedStorageFile.GetUserStoreForApplication())
            {
                if (!store.DirectoryExists(fileDirectory))
                {
                    store.CreateDirectory(fileDirectory);
                }

                WriteableBitmap bmpImage = new WriteableBitmap(targetWidth, targetHeight);
                bmpImage.SetSource(stream);

                using (IsolatedStorageFileStream isoStream =
                    store.OpenFile(fileDirectory + '/' + filename, FileMode.OpenOrCreate))
                {
                    System.Windows.Media.Imaging.Extensions.SaveJpeg(bmpImage, isoStream, targetWidth, targetHeight, 0, 100);
                }
            }
        }

        /// <summary>
        /// 将jpeg文件写入到数据流中
        /// </summary>
        /// <param name="filePath"></param>
        /// <returns></returns>
        public static BitmapImage ReadBitmapImageFromJPEG(string filePath)
        {                   
            BitmapImage image = new BitmapImage();
            Stream source = ReadStreamFromJPEG(filePath);
            image.SetSource(source);

            return image;
        }

        public static Stream ReadStreamFromJPEG(string filePath)
        {
            using (IsolatedStorageFile store = IsolatedStorageFile.GetUserStoreForApplication())
            {
                using (IsolatedStorageFileStream isoStream =
                    store.OpenFile(filePath, FileMode.Open))
                {
                    Stream fileStream = new MemoryStream();
                    isoStream.CopyTo(fileStream);

                    isoStream.Close();
                    isoStream.Dispose();
                    store.Dispose();

                    return fileStream;
                }
            }
        }
    }


  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值