WPF تظليل بكسل مع HDR (16-بت) الإدخال؟
-
20-09-2019 - |
سؤال
وأنا أحاول لبناء صورة المشاهد للصور PNG 16 بت مع برنامج الأغذية العالمي. كانت فكرتي لتحميل الصور مع PngBitmapDecoder
، ثم وضعها في عنصر تحكم Image
، والتحكم في السطوع / التباين مع تظليل بكسل.
ولكن، لاحظت أن المدخل إلى تظليل بكسل ويبدو أن تحول إلى 8 بت بالفعل. غير أن وجود قيود معروفة من WPF أو لم أقوم بإجراء مكان ما الخطأ؟ (راجعت أنه مع صورة التدرج أسود / أبيض بأنني خلقت في فوتوشوب والتي يتم التحقق منها كصورة 16 بت)
وهنا هو رمز لتحميل صورة (للتأكد من أن الحمل أنا مع مجموعة 16 بت كامل، مجرد كتابة المصدر = "test.png" في الأحمال تحكم صورة أنها 8 بت)
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;
وأنا خلقت تظليل بكسل مع عظيم Shazzam تظليل تأثير أداة .
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;
}
ودمج تظليل إلى XAML مثل هذا:
<Image Name="image" Stretch="Uniform">
<Image.Effect>
<shaders:AutoGenShaderEffect x:Name="MinMaxShader" Minvalue="0.0" Maxvalue="1.0>
</shaders:AutoGenShaderEffect>
</Image.Effect>
</Image>
المحلول
وأنا فقط حصلت على رد من مايكروسوفت. انها حقا وجود قيود في نظام تقديم WPF. سأحاول D3DImage
كحل.