Domanda

Sto cercando di costruire un visualizzatore di immagini per il 16-bit immagini PNG con WPF. Mia idea era di caricare le immagini con PngBitmapDecoder, poi metterli in un controllo Image, e controllare la luminosità / contrasto con un pixel shader.

Tuttavia, ho notato che l'ingresso al pixel shader sembra essere convertito in 8 bit già. È una limitazione nota di WPF o ti ho fatto un errore da qualche parte? (Ho controllato che con un'immagine gradiente bianco / nero che ho creato in Photoshop e che viene verificata immagini a 16 bit come)

Ecco il codice per caricare l'immagine (per assicurarsi che si carica con l'intera gamma a 16 bit, solo la scrittura Source = "test.png" nei carichi di controllo dell'immagine è a 8-bit)

BitmapSource bitmap;
using (Stream s = File.OpenRead("test.png"))
{
  PngBitmapDecoder decoder = new PngBitmapDecoder(s,BitmapCreateOptions.PreservePixelFormat, BitmapCacheOption.OnLoad);
  bitmap = decoder.Frames[0];
}

if (bitmap.Format != PixelFormats.Rgba64)
  MessageBox.Show("Pixel format " + bitmap.Format + " is not supported. ");

bitmap.Freeze();
image.Source = bitmap;

ho creato il pixel shader con la grande shazzam effetto dello shader strumento .

sampler2D implicitInput : register(s0);

float MinValue : register(c0);
float MaxValue : register(c1);

float4 main(float2 uv : TEXCOORD) : COLOR
{
    float4 color = tex2D(implicitInput, uv);

 float t = 1.0f / (MaxValue-MinValue);

    float4 result;    
    result.r = (color.r - MinValue) * t;
    result.g = (color.g - MinValue) * t;
    result.b = (color.b - MinValue) * t;
    result.a = color.a;

    return result;
}

E integrato lo shader in XAML in questo modo:

<Image Name="image" Stretch="Uniform">
  <Image.Effect>
    <shaders:AutoGenShaderEffect x:Name="MinMaxShader" Minvalue="0.0" Maxvalue="1.0>
    </shaders:AutoGenShaderEffect>
  </Image.Effect>
</Image>
È stato utile?

Soluzione

Ho appena ricevuto una risposta da Microsoft. E 'davvero una limitazione nel sistema di rendering di WPF. Cercherò D3DImage come una soluzione.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top