1

現在、データを画像形式で処理できるプログラムに取り組んでいます。画像 (おそらく 300 x 300) に対応するデータポイントがあり、値の範囲が 0 から 10000 で、画像をグレー値で表示したいとします。値の範囲 (0 ~ 10000) を 256 個に分割し、ビットマップ形式のグレー値に従って割り当てれば、それで問題ありません (すべての色を等しく設定して RGB を使用しました)。

ただし、ユーザーはコントラストと明るさを変更できる必要があります。つまり、黒に対応する値が 3000 (そして、明らかに以下のすべての値も黒) であり、白に対応する値が 5000+ であるとしましょう。中間の値は、灰色に線形依存する必要があります。ユーザーには 2 つのスライダーがあり、1 つは観測可能な値の範囲 (この場合は 2000) を変更するもので、もう 1 つは範囲を 3000 ~ 5000 から 5000 ~ 7000 にシフトするものです。問題は、実際にはスライダーをリアルタイムで動作させることです。ピクセルごとに 1 つの四角形で画像をシミュレートしようとしましたが、すべての四角形をループして色を変更するのは遅すぎます。うまくスムーズに機能させる方法を知っている人はいますか?

4

1 に答える 1

2

doubleまず、値の配列を値の配列に変換する必要がありbyteます。byte次に、この値の配列を に書き込むことができますWriteableBitmap。のコンテンツを繰り返し更新する必要がない場合はWriteableBitmap、フリーズしてパフォーマンスを向上させる必要もあります。

public static ImageSource GetImage(byte[] rawImageBytes, int width, int height)
{
    int channels = 1;
    int stride = width * channels;
    var image = new WriteableBitmap(width, height, 96, 96, PixelFormats.Gray8, null);
    image.WritePixels(new Int32Rect(0, 0, width, height), rawImageBytes, stride, 0);
    image.Freeze();
    return image;
}

のコンテンツを更新する場合は、オブジェクト インスタンスをフリーズせずに同じインスタンスをWriteableBitmap呼び出すだけで済みます。WritePixels

WPF アプリケーションでを表示するには、コントロールのプロパティにWriteableBitmap割り当てるだけです。SourceImage

于 2012-06-23T10:17:11.590 に答える