2

私はC#が初めてです。

FormatConvertedBitmap前述のように変換したいStream。そのための方法が見つかりませんでした。FormatConvertedBitmap をファイルに保存または書き込み、ストリームとして読み取ることを考えましたが、ファイルに書き込む方法が見つかりませんでした。

誰かが私を助けることができますか:

  1. FormatConvertedBitmap をストリームに変換する
  2. FormatConvertedBitmap をファイルに書き込み、それを Stream として読み取ります。

パブリック ストリーム イメージ

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

上記のコードでは、サーバーからストリームとして画像を取得し、ある条件でそれを grayScale image に変換しています。しかし、今度は 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;
4

1 に答える 1

1

メソッドCopyPixelsを使用して、FormatConvertedBitmap の内容をバイト配列に書き込むことができます。

次に、そのバイト配列を使用して、MemoryStreamを初期化するか、それらをBmpBitmapEncoderまたは他のBitmapEncoderを使用してファイルに格納できます。

于 2013-01-22T05:43:13.847 に答える