Question

Je suis en train de construire une visionneuse d'images pour 16 bits des images PNG avec WPF. Mon idée était de charger les images avec PngBitmapDecoder, puis les mettre dans un contrôle Image et contrôler la luminosité / contraste avec un pixel shader.

Cependant, je remarque que l'entrée du pixel shader semble être converti en 8 bits déjà. Est-ce une limitation connue de WPF ou ai-je fait une erreur quelque part? (I vérifié que, avec une image de gradient noir / blanc que je créé dans Photoshop et qui est vérifié que l'image de 16 bits)

Voici le code pour charger l'image (pour vous assurer que je charge la gamme complète de 16 bits, en train d'écrire Source = « test.png » dans les charges de contrôle de l'image il que 8 bits)

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;

J'ai créé le pixel shader avec le grand Shazzam outil effet de shader .

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;
}

intégré dans le shader XAML comme ceci:

<Image Name="image" Stretch="Uniform">
  <Image.Effect>
    <shaders:AutoGenShaderEffect x:Name="MinMaxShader" Minvalue="0.0" Maxvalue="1.0>
    </shaders:AutoGenShaderEffect>
  </Image.Effect>
</Image>
Était-ce utile?

La solution

Je viens de recevoir une réponse de Microsoft. Il est vraiment une limitation dans le système de rendu WPF. Je vais essayer D3DImage comme solution de contournement.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top