speichern WPF InkCanvas, um ein JPG - Bild immer beschnitten
Ich habe eine WPF-InkCanvas-control bin ich über eine Signatur erfassen in meiner Anwendung. Die Steuerung sieht wie folgt aus - es ist 700x300
alt-text http://img156.imageshack.us/img156/7885/inkcanvas.jpg
Allerdings, wenn ich speichern Sie es als JPG-Datei, wird das resultierende Bild sieht aus wie dieses, auch 700x300
alt-text http://img210.imageshack.us/img210/5668/saved.jpg
Den code, den ich verwende, um zu sparen
sigPath = System.IO.Path.GetTempFileName();
MemoryStream ms = new MemoryStream();
FileStream fs = new FileStream(sigPath, FileMode.Create);
RenderTargetBitmap rtb = new RenderTargetBitmap((int)inkSig.Width, (int)inkSig.Height, 96d, 96d, PixelFormats.Default);
rtb.Render(inkSig);
JpegBitmapEncoder encoder = new JpegBitmapEncoder();
encoder.Frames.Add(BitmapFrame.Create(rtb));
encoder.Save(fs);
fs.Close();
Dies ist der XAML-ich bin mit:
<Window x:Class="Consent.Client.SigPanel"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Background="Transparent" Topmost="True" AllowsTransparency="True"
Title="SigPanel" Left="0" Top="0" Height="1024" Width="768" WindowStyle ="None" ShowInTaskbar="False" ResizeMode="NoResize" WindowStartupLocation="CenterScreen" >
<Border BorderThickness="1" BorderBrush="Black" Background='#FFFFFFFF' x:Name='DocumentRoot' Width='750' Height='400' CornerRadius='10'>
<StackPanel HorizontalAlignment="Center" VerticalAlignment="Center">
<TextBlock Name="txtLabel" FontSize="24" HorizontalAlignment="Center" >Label</TextBlock>
<InkCanvas Opacity="1" Background="Beige" Name="inkSig" Width="700" Height="300" />
<StackPanel HorizontalAlignment="Center" Orientation="Horizontal">
<Button FontSize="24" Margin="10" Width="150" Name="btnSave" Click="btnSave_Click">Save</Button>
<Button FontSize="24" Margin="10" Width="150" Name="btnCancel" Click="btnCancel_Click">Cancel</Button>
<Button FontSize="24" Margin="10" Width="150" Name="btnClear" Click="btnClear_Click">Clear</Button>
</StackPanel>
</StackPanel>
</Border>
In der Vergangenheit klappte dies perfekt. Ich kann nicht herausfinden, was sich geändert hat, was das Bild zu verschieben, wenn es gespeichert wird.
Ich machte eine kleine Probe für dieses und verwendet Ihre genauen code zu speichern .jpg. Ich machte eine Reihe von Bildern und nicht einmal konnte ich das problem reproduzieren! Es muss woanders sein - können Sie Ihre XAML und alles andere, was relevant sein könnten?
InformationsquelleAutor Jason | 2009-08-05
Du musst angemeldet sein, um einen Kommentar abzugeben.
Aha! Das problem ist der TextBlock txtLabel das ist direkt über dem InkCanvas. Wenn Sie zu entfernen, dass die schwarze Linie verschwindet.
Als für, warum das passiert ist, ich bin mir nicht ganz sicher, aber,.
Es tut dies, weil man mit einem StackPanel. Die verschiedenen layout-panels einige hinterlistige Sachen, um Ihre Steuerelemente... in deinem Fall wirst du wahrscheinlich sehen, dass ein offset-Transformation angewendet wird, um Ihre InkCanvas. Ich denke, man kann es umgehen, indem Sie Ihre InkCanvas in einer Grenze. Siehe diesen link für weitere Infos: blogs.msdn.com/jaimer/archive/2009/07/03/...
Hinzufügen eines Rahmens um das InkCanvas hilft. So stellen Sie sicher Ihre Grenze und Leinwand haben die gleichen Abmessungen.
InformationsquelleAutor Charlie
Hatte ich dasselbe problem habe ich diesen Weg.. Er war hier..
InformationsquelleAutor Erman
Meiner Klasse Bild speichern
InformationsquelleAutor
Jason ich solvo dieses problem.
Sorry mein Englisch. ich bin russische.
Sie müssen set-Eigenschaft inkCanvas.Margin 0,0,0,0
dass
Oberfläche.Margin = new Thickness(0, 0, 0, 0);
nach dem speichern gesetzt Marge in Sie posicion
stehen im Beispiel:
ich Kirchenschiff
Oberfläche.Margin = new Thickness(0, 0, 0, 0);
http://img189.imageshack.us/img189/7499/mynewimage.png
InformationsquelleAutor
und
Oberfläche.Margin = new Thickness(55,40,96,5);
http://img519.imageshack.us/img519/7499/mynewimage.png
InformationsquelleAutor
InformationsquelleAutor
Ich habe auf der Suche alle über das Netz nach einer Antwort auf dieses problem und versucht, die meisten Meinungen ohne jegliche Freude. Dann habe ich versucht, und es funktionierte!
InformationsquelleAutor user4964503