【发布时间】:2016-06-28 08:55:03
【问题描述】:
我正在尝试在我的应用拍摄的照片上添加水印。我能想到的最简单的方法是使用FrameworkElement 构建图层,然后使用RenderTargetBitmap 创建水印图像。
这是我的 XAML 示例。
<ScrollViewer x:Name="Zoom" Grid.Column="1" HorizontalScrollMode="Enabled" VerticalScrollMode="Enabled" VerticalScrollBarVisibility="Hidden" HorizontalScrollBarVisibility="Hidden" ZoomMode="Enabled">
<Border x:Name="BgBorder">
<Grid x:Name="ImageGird" SizeChanged="ImageGird_SizeChanged">
<Grid x:Name="CaptureGird">
<Image x:Name="CapturedImage" Stretch="None" Source="ms-appx:///Assets/Photo.jpg" />
<StackPanel x:Name="Watermark" VerticalAlignment="Top" HorizontalAlignment="Left" Background="#6FFFFFFF" Margin="10">
<TextBlock Text="Name" Foreground="Black" Margin="10,2.5,10,2.5" />
<TextBlock Text="12345" Foreground="Black" Margin="10,2.5,10,2.5"/>
<TextBlock Text="54321" Foreground="Black" Margin="10,2.5,10,2.5" />
</StackPanel>
</Grid>
</Grid>
</Border>
</ScrollViewer>
由于他们需要的图像分辨率,它包含在ScrollViewer 中,因此可以缩小,但是当我尝试使用以下代码创建此图像的位图时,渲染的位图小于@ 987654325@
private async void Button_Click(object sender, RoutedEventArgs e)
{
try
{
var displayI = DisplayInformation.GetForCurrentView();
var renderTargetBitmap = new RenderTargetBitmap();
await renderTargetBitmap.RenderAsync(ImageGird, (int)ImageGird.ActualWidth, (int)ImageGird.ActualHeight);
IBuffer pixels = await renderTargetBitmap.GetPixelsAsync();
CapturedImage2.Source = renderTargetBitmap;
Debug.WriteLine("Button_Click: ImageGrid: " + ImageGird.ActualWidth + "x" + ImageGird.ActualHeight + " RenderTargetBitmap: " + renderTargetBitmap.PixelWidth + "x" + renderTargetBitmap.PixelHeight);
}
catch (Exception )
{
}
}
调试输出是
Button_Click: ImageGrid: 5344x3008 RenderTargetBitmap: 4096x2306
谁能告诉我为什么渲染的位图比我创建它的实际元素小得多?
还有更好的方法给图片加水印吗?
【问题讨论】:
标签: bitmap windows-phone-8.1 windows-store-apps windows-8.1