如何在C#中将FormatConvertedBitmap转换为Stream

时间:2013-01-22 05:35:06

标签: c# type-conversion file-handling

我是C#的新手。

如前所述,我想将FormatConvertedBitmap转换为Stream。 我找不到任何方法。我想将FormatConvertedBitmap保存或写入文件,以便将其作为Stream读取,但甚至无法找到将其写入文件的方法。

有人可以帮助我:

  1. 将FormatConvertedBitmap转换为Stream 或
  2. 将FormatConvertedBitmap写入文件,然后将其作为Stream读取。
  3. 公共流图像

        {
            get
        {//some condition
                    if (_image != null)
                    {
                        _image.Seek(0, SeekOrigin.Begin);
    
                        BitmapImage bmp = new BitmapImage();
                        MemoryStream stream = (MemoryStream)_image;
                        bmp.BeginInit();
                        bmp.StreamSource = stream;
                        bmp.CacheOption = System.Windows.Media.Imaging.BitmapCacheOption.OnLoad;
                        bmp.EndInit();
                        var grayBitmapSource = new FormatConvertedBitmap();
                        grayBitmapSource.BeginInit();
                        grayBitmapSource.Source = bmp;
                        grayBitmapSource.DestinationFormat = PixelFormats.Gray32Float;
                        grayBitmapSource.EndInit();
                        Stream st=new MemoryStream();
                        //File.WriteAllBytes(Path.GetTempPath(),grayBitmapSource);
                        return grayBitmapSource;
                    }
    

    在上面的代码中,我从服务器获取Image as Stream,然后在某种情况下我将其转换为grayScale图像。但现在我们应该返回一个Stream,最后我们有FormatConvertedBitmap。

    #####的 修改
    public Stream Image
            {
                get
                {
                    //some condition
    
                                if (_image != null)
                                {
                                    _image.Seek(0, SeekOrigin.Begin);
                                    BitmapImage bmp = new BitmapImage();
                                    MemoryStream stream = (MemoryStream)_image;
                                    bmp.BeginInit();
                                    bmp.StreamSource = stream;
                                    bmp.CacheOption = System.Windows.Media.Imaging.BitmapCacheOption.OnLoad;
                                    bmp.EndInit();
                                    var grayBitmapSource = new FormatConvertedBitmap();
                                    grayBitmapSource.BeginInit();
                                    grayBitmapSource.Source = bmp;
                                    grayBitmapSource.DestinationFormat = PixelFormats.Gray32Float;
                                    grayBitmapSource.EndInit();
                                    int bytePerPixel = grayBitmapSource.Format.BitsPerPixel / 8;
                                    int width = grayBitmapSource.PixelWidth;
                                    int height = grayBitmapSource.PixelHeight;
                                    int stride = width * bytePerPixel;
                                    byte[] resultLine = new byte[height * stride];
                                    grayBitmapSource.CopyPixels(resultLine, stride, 0);
                                    MemoryStream ms = new MemoryStream(resultLine);
                                    return ms;
    

1 个答案:

答案 0 :(得分:1)

您可以使用方法CopyPixels将FormatConvertedBitmap的内容写入字节数组。

然后,您可以使用该字节数组初始化MemoryStream或将其存储到BmpBitmapEncoder或其他BitmapEncoder的文件中。