Реализация функции сохранения в приложении C # для работы с изображениями - PullRequest
0 голосов
/ 21 апреля 2009

Я начал думать о том, как обрабатывать функции сохранения моего приложения, и подумал о двух вариантах:

Приложение имеет такие узлы, как:

Blur
Contrast
Sharpen
Invert
...

1. Интерпретация сохраненного файла, например:

Blur name:"Blur01" Amount:5
...

2. Сохранение сохраненного файла в формате, например:

Blur blur = new Blur ();
blur.Name = "Blur01"
blur.Amount = 5
...

Куда мне идти? Есть ли лучший способ справиться с этим?

Я хочу, чтобы сохраненный файл имел обратную и прямую совместимость.

РЕДАКТИРОВАТЬ: Спасибо за все ответы. Кто-нибудь может объяснить, почему № 2 не будет в будущем? Это потому, что можно изменить код загрузки / открытия для # 1, но не для # 2?

Ответы [ 5 ]

3 голосов
/ 21 апреля 2009

Возможно, вы могли бы использовать XML-сериализацию, поскольку она широко принята и удобочитаема. Вот учебник по этому вопросу: Сериализация XML

2 голосов
/ 21 апреля 2009

Я бы выбрал что-то более похожее на первый вариант.

Хотя, в целом, я думаю, что XML был бы лучшим подходом к этому, чем создание собственного синтаксиса. Это намного лучше с точки зрения совместимости / обеспечения будущего, чем пытаться создавать собственные синтаксические парсеры для вашего файла.

Как насчет чего-то вроде:

<Filters>
    <Blur Name="Blur01" />
    <Sharpen Name="Sharpen01" Amount=5 />
</Filters>
1 голос
/ 21 апреля 2009

Причина, по которой самовыполняемый «формат сохранения», как правило, плохая, заключается в том, что сегодня ваша функция «Размытие» может выглядеть следующим образом:

public class Blur
{
   int Amount = 5;
}

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

public class Blur
{
   int HorizontalAmount = 5;
   int VerticalAmount = 10;
}

и теперь, когда вы запустите этот сохраненный файл, он больше не будет компилироваться, потому что больше нет свойства 'Amount'. Затем, чтобы получить обратную совместимость, вам нужно «интерпретировать» значение Amount, чтобы оно теперь означало HorizontalAmount = 5 AND VerticalAmount = 5 (или что угодно).

Так что на самом деле, в конечном счете, вам будет лучше иметь интерпретированный формат файла с самого начала.

1 голос
/ 21 апреля 2009

Я бы тоже пошел с XML-файлом, так как это позволит вам обеспечить совместимость как вперед, так и назад.

Это потому, что вы ищите свойства, а не разбираете файл построчно.

Например, если размытие меняется с:

<Blur>
 <name>Blur01</name>
 <amount>5</amount>
</Blur>

до:

<Blur>
 <name>Blur01</name>
 <amount>5</amount>
 <feather>true</feather>
</Blur>

Старые версии приложения по-прежнему смогут читать файл, так как не будут искать свойство пера. Все, что вам нужно сделать, это убедиться, что вы устанавливаете значения по умолчанию при создании объектов, чтобы старые файлы можно было читать, не оставляя незаданных данных.

В ответ на обновление - нет причины, по которой вы не смогли сделать № 2 будущим. Вам просто нужно сделать версионирование самостоятельно.

0 голосов
/ 21 апреля 2009

Вы сохраняете его в текстовом файле?

Если это так, не лучше ли сохранить его в формате XML?

<Blur>
 <name>Blur01</name>
 <amount>5</amount>
</Blur>

В противном случае я не уверен, что понимаю вопрос:)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...