![]() |
|
Модераторы: Partizan, gambit |
![]()
|
|
| v00d00 |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 142 Регистрация: 28.12.2005 Репутация: нет Всего: нет |
Доброго времени суток.
Задача: Необходимо написать программу для загрузки файлов формата bmp (без стандартных компонент) После загрузки необходимо зашумить определенный цвет ( задается пользователем ) Затем применить фильтр к пикселям растра ( в принципе их может быть несколько ) Разложить растр в HSB из RGB Сохранить растр в формате PCX Сейчас у меня используется два класса: форма и один большой класс в котором собираюсь реализовать все выше написаное Какие бы вы выделили классы? |
|||
|
||||
| kosmonaFFFt |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 538 Регистрация: 14.4.2008 Где: Иннополис Репутация: нет Всего: 5 |
Навскидку - по классу на формат + методы конвертации к ним.
Класс фильтра и интерфейс для его наложения в стиле Рисунок.ПрименитьФильтр(Фильтр) -------------------- ![]() |
|||
|
||||
| -Mikle- |
|
|||
![]() Невидимка Vingrad'а ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 1672 Регистрация: 22.6.2003 Где: Казахстан, Астана Репутация: 17 Всего: 59 |
Также как уже сделали другие до тебя... а зачем тебе собственный велосипед? если только для самотренировки...
1. Базовый класс Image и производные от него (Bitmap, Metafile и т.д.) 2. Классы encoder-decoder для чтения-записи различных форматов 3. Базовый класс ImageFilter и производные от него (BlurImageFilter, MosaicaImageFilter 4. Базовый класс ImageEffect и производные от него (DropShaddowImageEffect, OuterGlowImageEffect и т.д.) Но лично я, не стал бы заморачиваться с первым и вторым пунктами, а взял бы готовые из System.Drawing. -------------------- Если тебе плюют в спину, значит ты впереди... |
|||
|
||||
| v00d00 |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 142 Регистрация: 28.12.2005 Репутация: нет Всего: нет |
Такс, функциональная часть реализована
Теперь нужно выбрать правильную архитектуру Вот такая на данный момент схема: ![]() Основная идея - написать такой класс для картинки, чтобы пользователь смог в дальнейшем добавлять работу с другими форматами графики не меняя код базового класса. Чтобы добавить реализацию работы с новым форматом нужно перекрыть конструктор в наследуемом классе от BaseImage и в нем вызвать методы RegisterILoader, RegisterISaver. Вот этот момент собственно меня и смущает.Есть идей как реализовать идею независимости от формата так, чтобы не пришлось вручную вызвать регистрацию интерфейсов, и не переопределять конструктор? |
|||
|
||||
| Rififi |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1254 Регистрация: 9.3.2008 Репутация: 5 Всего: 36 |
v00d00,
нужно перекрыть конструктор в наследуемом классе от BaseImage и в нем вызвать методы RegisterILoader, RegisterISaver. слишком сложно. Например можно создать интерфейс IBaseImage и пронаследоваться от IImageLoader, IImageSaver + вынести общий код в абстрактный класс Фильтры лучше сделать коллекцией - вдруг надо будет применить более одного img.Filters.Add/Remove(...); img.Filters.Apply(); фильтры можно также реализовать паттерном Command с возможностью Undo |
|||
|
||||
| v00d00 |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 142 Регистрация: 28.12.2005 Репутация: нет Всего: нет |
Не совсем понятно как будет реализована возможность подключения своих конвертеров. Передавать конвертер в качестве аргумента на методы Load и Save? Кстати фильтры далеко не самая главная часть системы, так как пишу не графический редактор П.С. может есть готовый шаблон который ложится на проблему с форматами картинки? |
|||
|
||||
| -Mikle- |
|
||||||
![]() Невидимка Vingrad'а ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 1672 Регистрация: 22.6.2003 Где: Казахстан, Астана Репутация: 17 Всего: 59 |
Ну чем-же вам не нравится как мелкософты сделали???
Вы можете сделать наподобие:
-------------------- Если тебе плюют в спину, значит ты впереди... |
||||||
|
|||||||
| v00d00 |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 142 Регистрация: 28.12.2005 Репутация: нет Всего: нет |
Ну на самом деле я так и сделал)
Просто чтобы добавить новый формат в класс(который, допустим, напишу не я), придется наследовать его и переопределять конструктор класса ImplementedImage. Т.е. теряется смысл использования всех этих интерфейсов, и данной абстракции в целом. Т.е. можно было бы просто зашить реализацию работы со всеми форматами в один класс и не парится)) А вот как сделать так чтобы существующему типу, можно было бы свободно добавлять новые обработчики графики, при этом не изменяя работы с классом в целом. П.С. додумался даже до такого Нужен строитель-одиночка, который будет правильно конструировать новые объекты ImplementedImage. Но все равно придется как-то переопределять класс-строитель. Блин замкнутый круг какой-то)) П.П.С. На самом деле задача носит чисто образовательный ( может даже развлекательный |
|||
|
||||
| Partizan |
|
|||
![]() Let's do some .NET ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 2828 Регистрация: 19.12.2005 Где: Санкт-Петербург Репутация: 18 Всего: 67 |
v00d00, класс-строитель классически называется фабрикой...
-------------------- СУВ, Partizan. |
|||
|
||||
| v00d00 |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 142 Регистрация: 28.12.2005 Репутация: нет Всего: нет |
Коротко, информативно, познавательно.
Это спарта? |
|||
|
||||
| mihryak |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 731 Регистрация: 28.4.2007 Где: С-Пб Репутация: 19 Всего: 36 |
строитель тоже есть, вместе с фабрикой относятся к порождающим паттернам
посмотри на шаблонный метод обработчики можно выставить коллекцией наружу (прямо или, как уже советовали, через add-remove) Это сообщение отредактировал(а) mihryak - 26.3.2009, 01:11 |
|||
|
||||
![]()
|
| Прежде чем создать тему, посмотрите сюда: | |
|
|
Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов. Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :) Так же не забывайте отмечать свой вопрос решенным, если он таковым является :) Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Общие вопросы по .NET и C# | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |