Векторная графика Adobe Animate CC Canvas (CreateJS) становится размытой при увеличении

Если ваш код вызова ссылается на сборку System.Windows.Forms, вы можете рассмотреть принципиально иной подход. Моя стратегия состоит в том, чтобы использовать функции, уже предоставленные каркасом, для выполнения этого в очень немногих строках кода и без необходимости перебирать столбцы и строки. Что делает код ниже, программно создает DataGridView «на лету» и устанавливает DataGridView.DataSource на DataTable. Затем я программно выбираю все ячейки (включая заголовок) в DataGridView и вызываю DataGridView.GetClipboardContent(), помещая результаты в Windows Clipboard. Затем, «вставьте» содержимое буфера обмена в вызов File.WriteAllText(), убедившись, что нужно указать форматирование «вставить» как TextDataFormat.CommaSeparatedValue.

Вот код:

public static void DataTableToCSV(DataTable Table, string Filename)
{
    using(DataGridView dataGrid = new DataGridView())
    {
        // Save the current state of the clipboard so we can restore it after we are done
        IDataObject objectSave = Clipboard.GetDataObject();

        // Set the DataSource
        dataGrid.DataSource = Table;
        // Choose whether to write header. Use EnableWithoutHeaderText instead to omit header.
        dataGrid.ClipboardCopyMode = DataGridViewClipboardCopyMode.EnableAlwaysIncludeHeaderText;
        // Select all the cells
        dataGrid.SelectAll();
        // Copy (set clipboard)
        Clipboard.SetDataObject(dataGrid.GetClipboardContent());
        // Paste (get the clipboard and serialize it to a file)
        File.WriteAllText(Filename,Clipboard.GetText(TextDataFormat.CommaSeparatedValue));              

        // Restore the current state of the clipboard so the effect is seamless
        if(objectSave != null) // If we try to set the Clipboard to an object that is null, it will throw...
        {
            Clipboard.SetDataObject(objectSave);
        }
    }
}

Обратите внимание: я также не забудьте сохранить содержимое буфера обмена до начала и восстановить его, как только закончите, так что пользователь не получит кучу неожиданного мусора в следующий раз, когда пользователь попытается вставить , Основные предостережения этого подхода: 1) ваш класс должен ссылаться на System.Windows.Forms, что может быть не так на уровне абстракции данных; 2) ваша сборка должна быть нацелена на платформу .NET 4.5, поскольку DataGridView не существует в 4.0 и 3). Метод будет терпеть неудачу, если буфер обмена используется другим процессом.

В любом случае, этот подход может быть неправильным для вашей ситуации, но он интересен тем не менее, и может быть еще один инструмент в вашем инструменте.

0
задан WillD 16 January 2019 в 16:57
поделиться

1 ответ

Анимация может быть экспортирована как изображения, но это не должно происходить, если вы не скажете это. Как выглядит ваша библиотека JavaScript? Экспортируются ли какие-либо изображения? Возможно, поищите в источнике .cache, чтобы узнать, не делает ли Adobe что-нибудь смешное под капотом.

Если карта является источником SVG: К сожалению, только единственная поддержка SVG в EaselJS (которая лежит в основе экспорта Animate) предназначена для svg в качестве «источника растрового изображения». Это означает, что он обрабатывается как изображение определенного размера, и масштабирование его выше «100%» будет интерполировать детали.

Может быть возможно загрузить его в качестве большего растрового изображения и уменьшить его до начала, но это:

  1. сделает его намного больше в памяти
  2. , все еще только позволяя Вы так сильно масштабируете

Другой вариант - импортировать SVG-ресурс в Adobe Animate, который должен преобразовать его в векторную графику. Если в EaselJS это вектор, вы можете масштабировать его столько, сколько хотите, потому что он использует векторные API Canvas для рисования вместо источника изображения.

Вы упомянули, что зеленый круг является родным (я предполагаю, что форма в Animate?). Вы уверены, что он не экспортируется как изображение, а не форма? Вы что-нибудь кешируете?

Надеюсь, это поможет!

0
ответ дан Lanny 16 January 2019 в 16:57
поделиться
Другие вопросы по тегам:

Похожие вопросы: