byte []到灰度BitmapImage

时间:2010-07-28 14:27:07

标签: c# wpf

我从一个128 x 128的双打数组开始,然后把它变成一个1D的字节数组,每个双数的比例值。

然后我接受这个字节数组并将其转换为内存流(下面为dataStream)并尝试将其放入BitmapImage中,如下所示:

imgScan.Width = 128;
imgScan.Height = 128;
BitmapImage bi = new BitmapImage();
bi.SourceRect = new Int32Rect(0, 0, width, height);
bi.StreamSource = dataStream;
imgScan.Source = bi;

此处imgScanSystem.Windows.Controls.Image

这不会产生预期的图像(我只是得到一个白色方块)。

我该怎么做呢?

1 个答案:

答案 0 :(得分:1)

我想你会发现在你的代码中,流应该包含一个完整的图像文件,而不是一个原始的数据块。这是从一个数据块创建一个位图(它不是灰度,但你可能会得到这个想法):

const int bytesPerPixel = 4;
int stride = bytesPerPixel * pixelsPerLine;
UInt32[] pixelBytes = new uint[lineCount * pixelsPerLine];

for (int y = 0; y < lineCount; y++)
{
    int destinationLineStart = y * pixelsPerLine;
    int sourceLineStart = y * pixelsPerLine;
    for (int x = 0; x < pixelsPerLine; x++)
    {
        pixelBytes[x] = _rgbPixels[x].Pbgr32;
    }
}
var bmp = BitmapSource.Create(pixelsPerLine, lineCount, 96, 96, PixelFormats.Pbgra32, null, pixelBytes, stride);
bmp.Freeze();
return bmp;

你已经完成了嵌套循环(制作字节数组)中的位,但是我把它留在了所以你可以看到创建之前的内容