所以我确实喜欢3小时的研究,但却无法正常工作。 我在运行时获得了将BitmapImage作为属性的对象。我想在这个BitmapImage上写文字。我怎么能用C#& amp; XAML?
我读了一些关于能够构造WriteableBitmap和.render()方法的内容,但我只在Windows.UI.Xaml.Media.Imaging命名空间中找到了一个WriteableBitmap类。
任何人都可以阻止我从一个片段开始吗?
答案 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中。