如何在c#中将FormatConvertedBitmap转换为流

本文关键字:转换 FormatConvertedBitmap 中将 | 更新日期: 2023-09-27 17:54:55

我是c#新手

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

有谁能帮我吗?

  1. 将FormatConvertedBitmap转换为流或
  2. 将FormatConvertedBitmap写入文件,然后作为流读取。

公共流图像

    {
        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;
                }

在上面的代码中,我从服务器获得图像作为流,然后在某些条件下我将其转换为灰度图像。但现在我们应该返回一个流,最后我们有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;

如何在c#中将FormatConvertedBitmap转换为流

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

你可以使用这个字节数组来初始化MemoryStream或者用BmpBitmapEncoder或其他BitmapEncoder将它们存储到文件中