私はC#が初めてです。
FormatConvertedBitmap
前述のように変換したいStream
。そのための方法が見つかりませんでした。FormatConvertedBitmap をファイルに保存または書き込み、ストリームとして読み取ることを考えましたが、ファイルに書き込む方法が見つかりませんでした。
誰かが私を助けることができますか:
- FormatConvertedBitmap をストリームに変換する
- 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;