我是C#的新手。
如前所述,我想将FormatConvertedBitmap
转换为Stream
。
我找不到任何方法。我想将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;
}
在上面的代码中,我从服务器获取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;
答案 0 :(得分:1)
您可以使用方法CopyPixels将FormatConvertedBitmap的内容写入字节数组。
然后,您可以使用该字节数组初始化MemoryStream或将其存储到BmpBitmapEncoder或其他BitmapEncoder的文件中。