如何在c#中将FormatConvertedBitmap转换为流
本文关键字:转换 FormatConvertedBitmap 中将 | 更新日期: 2023-09-27 17:54:55
我是c#新手
如前所述,我想将FormatConvertedBitmap
转换为Stream
。我找不到任何方法。我想保存或写入FormatConvertedBitmap到一个文件中,以便将其作为流读取,但甚至找不到将其写入文件的方法。
有谁能帮我吗?
- 将FormatConvertedBitmap转换为流或
- 将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;
您可以使用CopyPixels方法将FormatConvertedBitmap的内容写入字节数组。
你可以使用这个字节数组来初始化MemoryStream或者用BmpBitmapEncoder或其他BitmapEncoder将它们存储到文件中