如何在Windows Phone 8.1中执行文本块文本字体显示平滑和抗锯齿#c#

时间:2016-04-20 15:39:01

标签: windows-phone-8.1

我正在写,在文本块上动态写文本并保存为图像。将图像放在文本上没有正确显示平滑度。

我使用此代码:

xaml :<Grid x:Name="gridCanvasPanel" Grid.Row="1" Margin="0,12" Tap="CanvasPanel_Tap">
        <Canvas x:Name="CanvasPanel" Height="400" VerticalAlignment="Top" Background="Green">
            <RichTextBox  Width="450" Canvas.Left="10" Canvas.Top="20">
                <Paragraph>
                    <Run FontSize="25" Foreground="White">Now we're e-mailing and tweeting and texting so much, a phone call comes as a fresh surprise. I get text messages on my cell phone all day long, and it warbles to alert me that someone has sent me a message on Facebook or a reply or direct message on Twitter, but it rarely ever rings.</Run>
                    <LineBreak/>
                    <Run FontSize="20" Foreground="YellowGreen">Susan Orlean</Run>
                </Paragraph>
            </RichTextBox>
        </Canvas>
    </Grid>

C#代码:

            var bmp = new RenderTargetBitmap();
            await bmp.RenderAsync(this.CanvasPanel);
            // Setting.  
            bitmap = bmp as RenderTargetBitmap;
            StorageFile file = null;
            file = obj;

            using (var stream = await file.OpenStreamForWriteAsync())
            {
                // Initialization.  
                var pixelBuffer = await bitmap.GetPixelsAsync();
                var logicalDpi = DisplayInformation.GetForCurrentView().LogicalDpi;
                // convert stream to IRandomAccessStream  
                var randomAccessStream = stream.AsRandomAccessStream();
                // encoding to PNG  
                var encoder = await BitmapEncoder.CreateAsync(BitmapEncoder.PngEncoderId, randomAccessStream);
                // Finish saving  
                encoder.SetPixelData(BitmapPixelFormat.Bgra8, BitmapAlphaMode.Premultiplied, (uint)bitmap.PixelWidth,
                  (uint)bitmap.PixelHeight, logicalDpi, logicalDpi, pixelBuffer.ToArray());
                // Flush encoder.
                await encoder.FlushAsync();

            }

1 个答案:

答案 0 :(得分:0)

在位图编码器上设置图像BitmapProperty。

 IAsyncOperation<BitmapEncoder> CreateEncoderWithEncodingOptionsAsync(Windows.Storage.Streams.IRandomAccessStream stream)
    {
        var propertySet = new Windows.Graphics.Imaging.BitmapPropertySet();
        var qualityValue = new Windows.Graphics.Imaging.BitmapTypedValue(
            1.0, // Maximum quality
            Windows.Foundation.PropertyType.Single
            );

        propertySet.Add("ImageQuality", qualityValue);
        return Windows.Graphics.Imaging.BitmapEncoder.CreateAsync(
            Windows.Graphics.Imaging.BitmapEncoder.JpegEncoderId,
            stream,
            propertySet
            );

        // Encoder is initialized with encoding options.
    }