Ich versuche verzweifelt, einen Highlight-Strich als PNG zu speichern. Ich benutze win2d für UWP, um diese Arbeit zu machen. Es funktioniert gut für Striche mit 100% Deckkraft, aber wenn ich DrawAsHighlighter = true;
setze, ist das gespeicherte PNG leer, vollständig transparent.win2D Uwp speichert keinen Hervorhebungsstrich in einem Inkcanvas
Hier ist mein Code:
private void SetHighLight()
{
InkDrawingAttributes attributes = new InkDrawingAttributes();
attributes.DrawAsHighlighter = true;
attributes.PenTip = PenTipShape.Rectangle;
attributes.Size = new Size(4, 10);
attributes.Color = currentColor;
SetAttribute(attributes);
}
private void GetCanvasRender(out CanvasRenderTarget renderTarget)
{
CanvasDevice device = CanvasDevice.GetSharedDevice();
renderTarget = new CanvasRenderTarget(device, (int)ink.ActualWidth, (int)ink.ActualHeight, 96);
using (var ds = renderTarget.CreateDrawingSession())
{
ds.Clear(Colors.Transparent); //I already tried to delete this but it doesn't change anything
ds.DrawInk(ink.InkPresenter.StrokeContainer.GetStrokes());
}
}
private async void SavePicture()
{
CanvasRenderTarget renderTarget;
Image img = new Image();
GetCanvasRender(out renderTarget);
StorageFolder storageFolder = ApplicationData.Current.LocalFolder;
StorageFile noteFile = await storageFolder.CreateFileAsync(i.ToString() + ".png", CreationCollisionOption.ReplaceExisting);
using (var fileStream = await noteFile.OpenAsync(FileAccessMode.ReadWrite))
await renderTarget.SaveAsync(fileStream, CanvasBitmapFileFormat.Png, 1f);
img.Source = new BitmapImage(new Uri(storageFolder.Path + "/" + i++ + ".png"));
img.VerticalAlignment = VerticalAlignment.Stretch;
ContainerCanvas.Children.Add(img);
Canvas.SetTop(img, ScrollViewerContainer.VerticalOffset);
Canvas.SetZIndex(img, 5);
}
ich gelesen habe es wegen der Höhepunkt möglicherweise nicht in der visuellen Struktur vorhanden ist, aber ich bin wirklich darüber nicht sicher.
Übrigens, wenn ich versuche, die Opazität einer Farbe zu ändern (attributes.Color = Color.FromArgb(128, 255, 0, 0)
), die Inkcanvas nicht das Alpha, warum? Fehle ich etwas?
Hallo, Vielen Dank für Ihre Antwort, aber ich brauche den Hintergrund transparent zu sein. Außerdem, mit weißem Hintergrund, können Sie die Opazität nicht mehr sehen: '( – Kinemu
) Vielleicht können Sie das nicht transparente Bild erhalten, dann entfernen Sie jedes Pixel, das vollständig weiß ist, und dann ersetzen Sie jedes nicht transparente Pixel der Leinwand mit die gewünschte Farbe (nicht deckende Farbe) – Dean
@Dean Das Problem damit könnte sein, dass aufgrund der Linienglättung weiße Artefakte um einen Strich entstehen, wenn ein Bild wie dieses auf einem nicht weißen Hintergrund gerendert wird.Kinemu, ich glaube nicht, dass du den Highlighter dann benutzen kannst. Sie müssen wahrscheinlich einen benutzerdefinierten Pinsel für das normale Zeichnen erstellen oder die Zeichnung der entsprechenden Tinte mit Win2D selbst verwalten. – SebastianR