0

BitmapImage 可以通过将 byte[] 设置为 StreamSource 来自动获取 PixelHeight 和 PixelWidth 和 PixelFormat 等。但是 WritableBitmap 不能。我必须将 byte[] 转换为 BitmapImage,获取 PixelHeight 和 PixelWidth 以及 PixelFormat,与现有的 WritableBitmap 进行比较。如果像素改变,新的 WritableBitmap 来更新它,如果没有改变,只是 BitmapImage.CopyPixels 到 WritableBitmap?

我想在我的电脑上显示 100 个远程电脑显示器。和远程电脑可以设置像素质量动态。数据可以通过我的电脑中的 rpc 接收,只是 byte[] 图像。

4

2 回答 2

0

我使用以下代码逐字节写入相同的内容

bitmap.Lock();
IntPtr buffer = bitmap.BackBuffer;
//Logic to write to buffer by pixel by pixel using Parallel.Foreach()
bitmap.AddDirtyRect
bitmap.UnLock()

这里的问题是有时在渲染实际图像之前有黑色背景然后出现实际图像,任何人都对此有想法

于 2020-05-27T09:57:12.663 回答
0
Wpf Xaml code used
 <Grid x:Name="ImageGrid" Grid.Row="1" >
                <AdornerDecorator ClipToBounds="True">
                    <Canvas x:Name="ImageCanvas" Focusable="True" 
                             Background="{StaticResource Moonstone}" 
                             Width="{Binding WindowWidth}" 
                             Height="{Binding WindowHeight}"                
                             >
                        <Image  Canvas.Left="{Binding Path=ImagePositionLeft}" 
                                Canvas.Top="{Binding Path=ImagePositionTop}"
                              
                               RenderTransformOrigin="0.1,0.1"
                               Source="{Binding ImSource}" 
                               Width="{Binding Path=ImageActualWidth}" 
                               Height="{Binding Path=ImageActualHeight}"
                               Stretch="None"
                               RenderOptions.BitmapScalingMode="{Binding  ScalingMode}">
                            <Image.RenderTransform>
                                <MatrixTransform Matrix="{Binding CurrTransform.Matrix}"></MatrixTransform>
                            </Image.RenderTransform>
                        </Image>
                    </Canvas>
                </AdornerDecorator>
            </Grid>
于 2020-08-21T09:18:11.917 回答