保存Ink Canvas以将结果流式传输为空白.GIF

时间:2017-01-09 01:32:02

标签: c# stream uwp inkcanvas

我正在用C#编写一个UWP应用程序 - 它将是一个Flashcard应用程序,其中包含两个用于"前端"和"返回"的卡片。 InkCanvas功能似乎工作正常。问题是,当我去"保存" InkCanvas的笔画容器到.GIF文件(这些documents支持),生成的.GIF文件不包含墨迹。相反,它们大多是空白的。示例:

Blank .GIF files

UWP开发人员可以帮助我指出正确的方向吗?以下是当前形式的代码:

CreateFlashCard.xaml.cs:

private void AddToDeck(object sender, RoutedEventArgs e)
    {
        // If there was ink on the canvases
        if (inkCanvas.InkPresenter.StrokeContainer.GetStrokes().Count > 0 
            && inkCanvas2.InkPresenter.StrokeContainer.GetStrokes().Count > 0)
        {
            // Create the FlashCard and add it to the deck
            FlashCard newCard = new FlashCard
            {
                Front = inkCanvas.InkPresenter,
                Back = inkCanvas2.InkPresenter
            };

            // Add to the deck
            if (Deck == null)
            {
                Deck = new List<FlashCard>();
            }
            // Now Add to the Deck
            Deck.Add(newCard);

            // Save the card
            newCard.Save(_FolderName, Deck.Count-1);

            // Now make way for new InkCanvases
            inkCanvas.InkPresenter.StrokeContainer.Clear();
            inkCanvas2.InkPresenter.StrokeContainer.Clear();

        }
        // The user is adding a new card without drawing on the old one
        else
        {
            return;   
        }


    }

FlashCard.cs:

    /// <summary>
    /// Save the canvases to GIF files in the deck's folder.
    /// </summary>
    /// <param name="FolderName"> The folder to save the files in</param>
    /// <param name="CardIndex">The "number" of the card that is being saved</param>
    public async void Save(string FolderName, int CardIndex)
    {
        // Find existing folder
        StorageFolder folder = await ApplicationData.Current.LocalFolder.GetFolderAsync(FolderName);
        if (folder == null)
        {
            // Error!
        } else
        {
            // Use a utility function to write to files
            // Front and Back being InkPresenters from two sep. InkCanvases
            WriteWithStream(folder, CardIndex, 'A', Front );
            WriteWithStream(folder, CardIndex, 'B', Back);

        }

    }

    private async void WriteWithStream(StorageFolder folder, int CardIndex, char Letter, InkPresenter FrontOrBack)
    {
        // Generate the ink files, A and B
        StorageFile inkFile = await folder.CreateFileAsync("Card" + CardIndex + Letter + ".gif", CreationCollisionOption.ReplaceExisting);
        // Prevent changes until we're done
        //CachedFileManager.DeferUpdates(inkFile);
        // Open a stream
        IRandomAccessStream stream = await inkFile.OpenAsync(FileAccessMode.ReadWrite);
        // Write out using the stream
        using (IOutputStream outputStream = stream.GetOutputStreamAt(0))
        {
            await FrontOrBack.StrokeContainer.SaveAsync(outputStream);
            await outputStream.FlushAsync();
        }
        // Dispose of the stream
        stream.Dispose();
        // We are now done with the file
        Windows.Storage.Provider.FileUpdateStatus status = await CachedFileManager.CompleteUpdatesAsync(inkFile);
    }

谢谢大家!

1 个答案:

答案 0 :(得分:0)

已解决 - 我的&#34;保存功能的异步性质&#34;与清除画布相冲突 - 我需要等待生成文件,然后清除画布。