Модераторы: Partizan, gambit
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Помогите выделить классы 
:(
    Опции темы
v00d00
Дата 20.3.2009, 19:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 142
Регистрация: 28.12.2005

Репутация: нет
Всего: нет



Доброго времени суток.

Задача:
Необходимо написать программу для загрузки файлов формата bmp (без стандартных компонент)
После загрузки необходимо зашумить определенный цвет ( задается пользователем )
Затем применить фильтр к пикселям растра ( в принципе их может быть несколько )
Разложить растр в HSB из RGB
Сохранить растр в формате PCX

Сейчас у меня используется два класса: форма и один большой класс в котором собираюсь реализовать все выше написаное

Какие бы вы выделили классы?

PM MAIL   Вверх
kosmonaFFFt
Дата 20.3.2009, 21:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 538
Регистрация: 14.4.2008
Где: Иннополис

Репутация: нет
Всего: 5



Навскидку - по классу на формат + методы конвертации к ним.
Класс фильтра и интерфейс для его наложения в стиле Рисунок.ПрименитьФильтр(Фильтр)


--------------------
user posted image
PM MAIL ICQ   Вверх
-Mikle-
Дата 21.3.2009, 10:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Невидимка Vingrad'а
***


Профиль
Группа: Экс. модератор
Сообщений: 1672
Регистрация: 22.6.2003
Где: Казахстан, Астана

Репутация: 17
Всего: 59



Также как уже сделали другие до тебя... а зачем тебе собственный велосипед? если только для самотренировки...

1. Базовый класс Image и производные от него (Bitmap, Metafile и т.д.)
2. Классы encoder-decoder для чтения-записи различных форматов
3. Базовый класс ImageFilter и производные от него (BlurImageFilter, MosaicaImageFilter  smile  и т.д.)
4. Базовый класс ImageEffect и производные от него (DropShaddowImageEffect, OuterGlowImageEffect и т.д.)

Но лично я, не стал бы заморачиваться с первым и вторым пунктами, а взял бы готовые из System.Drawing.



--------------------
Если тебе плюют в спину, значит ты впереди...
PM   Вверх
v00d00
Дата 25.3.2009, 14:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 142
Регистрация: 28.12.2005

Репутация: нет
Всего: нет



Такс, функциональная часть реализована

Теперь нужно выбрать правильную архитектуру

Вот такая на данный момент схема:
user posted image

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

Чтобы добавить реализацию работы с новым форматом нужно перекрыть конструктор в наследуемом классе от BaseImage и в нем вызвать методы RegisterILoader, RegisterISaver.

Вот этот момент собственно меня и смущает.Есть идей как реализовать идею независимости от формата так, чтобы не пришлось вручную вызвать регистрацию интерфейсов, и не переопределять конструктор?
PM MAIL   Вверх
Rififi
Дата 25.3.2009, 14:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1254
Регистрация: 9.3.2008

Репутация: 5
Всего: 36



v00d00, 
нужно перекрыть конструктор в наследуемом классе от BaseImage и в нем вызвать методы RegisterILoader, RegisterISaver.
слишком сложно.

Например можно создать интерфейс IBaseImage и пронаследоваться от IImageLoader, IImageSaver
+ вынести общий код в абстрактный класс

Фильтры лучше сделать коллекцией - вдруг надо будет применить более одного
img.Filters.Add/Remove(...);
img.Filters.Apply();

фильтры можно также реализовать паттерном Command с возможностью Undo
PM MAIL   Вверх
v00d00
Дата 25.3.2009, 15:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 142
Регистрация: 28.12.2005

Репутация: нет
Всего: нет



Цитата(Rififi @ 25.3.2009,  14:37)


Например можно создать интерфейс IBaseImage и пронаследоваться от IImageLoader, IImageSaver
+ вынести общий код в абстрактный класс


Не совсем понятно как будет реализована возможность подключения своих конвертеров. Передавать конвертер в качестве аргумента на методы Load и Save?

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

П.С. может есть готовый шаблон который ложится на проблему с форматами картинки?
PM MAIL   Вверх
-Mikle-
Дата 25.3.2009, 20:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Невидимка Vingrad'а
***


Профиль
Группа: Экс. модератор
Сообщений: 1672
Регистрация: 22.6.2003
Где: Казахстан, Астана

Репутация: 17
Всего: 59



Цитата(v00d00 @  25.3.2009,  18:17 Найти цитируемый пост)
может есть готовый шаблон который ложится на проблему с форматами картинки?

Ну чем-же вам не нравится как мелкософты сделали???

Код

    Image img = Image.FromFile("............");
    img.Save("........", ImageFormat.JPEG);
    img.Save("........", ImageFormat.BMP);


Вы можете сделать наподобие:
Код

    ImageBase img = ImageBase.Load("..........", ImgFormats.Jpg);
    img.Save("........", ImgFormats.Pcx);



--------------------
Если тебе плюют в спину, значит ты впереди...
PM   Вверх
v00d00
Дата 26.3.2009, 00:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 142
Регистрация: 28.12.2005

Репутация: нет
Всего: нет



Ну на самом  деле я так и сделал)
Просто чтобы добавить новый формат в класс(который, допустим, напишу не я), придется наследовать его и переопределять конструктор класса ImplementedImage. Т.е. теряется смысл использования всех этих интерфейсов, и данной абстракции в целом. Т.е. можно было бы просто зашить реализацию работы со всеми форматами в один класс и не парится))


А вот как сделать так чтобы существующему типу, можно было бы свободно добавлять новые обработчики графики, при этом не изменяя работы с классом в целом.


П.С. додумался даже до такого

Нужен строитель-одиночка, который будет правильно конструировать новые объекты ImplementedImage. Но все равно придется как-то переопределять класс-строитель. Блин замкнутый круг какой-то))

П.П.С.

На самом деле задача носит чисто образовательный ( может даже развлекательный  smile ) характер. Поэтому хочется позамарачиваться со структурой системы)


PM MAIL   Вверх
Partizan
Дата 26.3.2009, 00:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Let's do some .NET
****


Профиль
Группа: Модератор
Сообщений: 2828
Регистрация: 19.12.2005
Где: Санкт-Петербург

Репутация: 18
Всего: 67



v00d00, класс-строитель классически называется фабрикой...


--------------------
СУВ,
       Partizan.
PM MAIL WWW ICQ Skype GTalk Jabber   Вверх
v00d00
Дата 26.3.2009, 00:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 142
Регистрация: 28.12.2005

Репутация: нет
Всего: нет



Коротко, информативно, познавательно.
Это спарта? smile 
PM MAIL   Вверх
mihryak
Дата 26.3.2009, 01:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 731
Регистрация: 28.4.2007
Где: С-Пб

Репутация: 19
Всего: 36



Цитата(Partizan @  26.3.2009,  01:17 Найти цитируемый пост)
класс-строитель классически называется фабрикой... 

строитель тоже есть, вместе с фабрикой относятся к порождающим паттернам

Цитата(v00d00 @  26.3.2009,  01:11 Найти цитируемый пост)
А вот как сделать так чтобы существующему типу, можно было бы свободно добавлять новые обработчики графики, при этом не изменяя работы с классом в целом.

посмотри на шаблонный метод
обработчики можно выставить коллекцией наружу (прямо или, как уже советовали, через add-remove)

Это сообщение отредактировал(а) mihryak - 26.3.2009, 01:11
PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
mr.DUDA
THandle

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.
Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :)
Так же не забывайте отмечать свой вопрос решенным, если он таковым является :)


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Общие вопросы по .NET и C# | Следующая тема »


 




[ Время генерации скрипта: 0.2016 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.