байт [] в градацию серого BitmapImage - PullRequest
2 голосов
/ 28 июля 2010

Я начинаю с массива двойных 128 x 128 и превращаю его в одномерный массив байтов с пропорциональными значениями для каждого двойного.(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;

Здесь imgScan - это System.Windows.Controls.Image

.изображение (я просто получаю белый квадрат).

Как мне поступить об этом?

1 Ответ

1 голос
/ 28 июля 2010

Я думаю, вы обнаружите, что в вашем коде поток должен содержать полный файл изображения, а не необработанный блок данных. Вот создание растрового изображения из блока данных (это не оттенки серого, но вы можете понять это):

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;

Вы уже выполнили бит во вложенных циклах (создание байтового массива), но я оставил его, чтобы вы могли видеть, что предшествует Create

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...