使用字节数组显示TIF图像到可写位图(C#)

时间:2015-09-19 04:42:33

标签: c# wpf

我是tiff图像的字节数组。我希望从中形成3张图片,我稍后会做,但问题是我无法按原样显示原始图像。

这是我的xaml:

<Image Grid.Row="0" Grid.Column="0" Name="ReferenceImage"/>

xaml.cs代码:

public MainWindow()
        {
            InitializeComponent();
            ImagePath = @"G:\TiffImage\Test.TIF"
            DisplayAllImages();
        }

        private void DisplayAllImages()
        {

            byte[] imageSize = File.ReadAllBytes(ImagePath);

            ReferenceImage.Source = DisplayAllImages(imageSize, 64, 64);
     }

private WriteableBitmap DisplayAllImages(byte[] imageData,int height,int width)
        {
            if (imageData != null)
            {

                PixelFormat format = PixelFormats.Gray8;
                WriteableBitmap wbm = new WriteableBitmap(height, width, 96, 96, format, null);
                wbm.WritePixels(new Int32Rect(0, 0, height, width), imageData, 1*width, 0);
                return wbm;
            }
            else
            {
                return null;
            }

        }

我的主要目的是只使用这种方式使用字节数组显示图像,这样我就可以根据需要提取字节数组以形成其他图像。

1 个答案:

答案 0 :(得分:1)

图像文件包含编码的位图数据。要访问原始像素,首先必须解码位图:

BitmapSource bitmap;

using (var fileStream = new FileStream(ImagePath, FileMode.Open, FileAccess.Read))
{
    bitmap = BitmapFrame.Create(
        fileStream, BitmapCreateOptions.None, BitmapCacheOption.OnLoad);
}

现在,您可以通过调用BitmapSource的CopyPixels方法获取原始像素:

var width = bitmap.PixelWidth;
var height = bitmap.PixelHeight;
var stride = (width * bitmap.Format.BitsPerPixel + 7) / 8;
var imageData = new byte[height * stride];

bitmap.CopyPixels(imageData, stride, 0);