Windows Phone 8.1在图像上写入文本

时间:2014-07-31 18:24:17

标签: c# xaml windows-phone-8.1

所以我确实喜欢3小时的研究,但却无法正常工作。 我在运行时获得了将BitmapImage作为属性的对象。我想在这个BitmapImage上写文字。我怎么能用C#& amp; XAML?

我读了一些关于能够构造WriteableBitmap和.render()方法的内容,但我只在Windows.UI.Xaml.Media.Imaging命名空间中找到了一个WriteableBitmap类。

任何人都可以阻止我从一个片段开始吗?

1 个答案:

答案 0 :(得分:4)

我找到了一种很好的方法来让图像中的文字生效。 我使用网格控件将Image和两个TextBox映射到彼此。 确保首先说明图像,这意味着它首先被渲染。

<Grid Grid.Row="1" x:Name="Capture_Grid">
 <Image Binding="{Binding Image}" />

 <TextBox x:Name="UpperCaptionBorder_TextBox" Style="{StaticResource CaptionTextBoxStyle}" 
 Text="text" TextWrapping="Wrap" FontSize="32"
 HorizontalAlignment="Center" VerticalAlignment="Bottom"
 SelectionChanged="UpperCaption_TextBox_SelectionChanged"
 />

 <TextBox x:Name="LowerCaptionBorder_TextBox" Style="{StaticResource CaptionTextBoxStyle}" 
 Text="text" TextWrapping="Wrap" FontSize="32"
 HorizontalAlignment="Center" VerticalAlignment="Bottom"
 SelectionChanged="LowerCaption_TextBox_SelectionChanged"
 />
</Grid>

然后我可以将整个网格控件保存为'Scresn Shot',但它只会像Grid实际上一样宽度和高度。

        RenderTargetBitmap renderTargetBitmap = new RenderTargetBitmap();
        await renderTargetBitmap.RenderAsync(Capture_Grid);
        var pixels = await renderTargetBitmap.GetPixelsAsync();
        Grid element = Capture_Grid;

//文件扩展名更正

        var file = await KnownFolders.PicturesLibrary.CreateFileAsync("pic.png", CreationCollisionOption.ReplaceExisting);

        using (IRandomAccessStream stream = await file.OpenAsync(FileAccessMode.ReadWrite))
        {
            var encoder = await
                BitmapEncoder.CreateAsync(BitmapEncoder.JpegEncoderId, stream);
            byte[] bytes = pixels.ToArray();
            encoder.SetPixelData(BitmapPixelFormat.Bgra8,
                                 BitmapAlphaMode.Ignore,
                                 (uint)renderTargetBitmap.PixelWidth,
                                    (uint)renderTargetBitmap.PixelHeight,
                                 96, 96, bytes);

            await encoder.FlushAsync();
        }

它还将Image(Grid + 2 TextBoxes)保存在Image Hub中。