Страница: 1 |
Страница: 1 |
Вопрос: Работа с изображением
Добавлено: 23.12.09 16:44
Автор вопроса: Саня | ICQ: 553816426
Привет всем.
В общем, решил сделать программу, которая, сможет подготовить картинку для вышивки (на VB6).
Алгоритм действий следующий:
1. Разбить изображение на блоки, например 5х5 пикселей и закрасить цветом центрального пикселя. Это будут крестики вышивки.
2. Считать в массив все цвета, которые встречаются в изображении, и объединить близкие по значению в один (соответственно на картинке тоже). Таким образом, чтобы, к примеру, оттенков красного было не больше 5.
3. Нарисовать сетку разделяющую блоки, так, чтобы цвет линии менялся в зависимости от цвета прилегающих блоков (если блоки черные, то цвет линии белый…).
Попытался сделать 1 пункт с помощью вложенных циклов, свойством Point заполняю массив, элемент которого, является структурой, где сохраняются координаты пикселя и его цвет, потом беру цвет центрального пикселя и проставляю по всему массиву и методом Pset рисую назад. (использую элемент управления PictureBox).
После того, как все заработало, был повержен в шок, фото, сделанное мобильным 1280х1024 точек, обработалось всего за 17 минут 29 секунд! (Комп проц Athlon 2500, оперативки 2gb)
Я, конечно же, понимаю, что большего изврата трудно даже представить но, к сожалению, уровень знаний, по работе с графикой, мягко говоря - никакой.
Подозреваю, что есть API, с помощью которых, это можно сделать немножко быстрее :-). Потому что постоянное обращение с цикла к свойствам и методам PictureBox, это просто жесть.
Может, кто то, поделится своими мыслями по реализации данной задачи средствами VB6.
В общем, прочитал, то, что написал, и понял - надо качать «уроки Photoshop». :-)
Ответы
Всего ответов: 12
Номер ответа: 1
Автор ответа:
VβÐUηìt
Вопросов: 246
Ответов: 3333
Web-сайт:
Профиль | | #1
Добавлено: 23.12.09 17:11
Делается все намного проще: уменьшай сначала картинку до своих 5x5 пикселей с помощью PaintPicture, затем с помощью того же метода увеличивай до исходного размера. Получишь пункт 1.
Чтобы реализовать пункт 2, не надо так жутко извращаться. Лучше пройтись по готовым блокам и посчитать близкие цвета в них. В исходном изображении 1280x1024 тебе бы пришлось объеденять близкие по значению цвета 1 310 720 раз, а в случае разбиения на твои 5x5 - всего 25. Результат один, а быстродействие повысится в 52 428,8 раз.
С пунктом 3, думаю, справишся сам.
Вот так.
Номер ответа: 2
Автор ответа:
Саня
ICQ: 553816426
Вопросов: 10
Ответов: 99
Профиль | | #2
Добавлено: 23.12.09 17:16
ТОЧНО!!! PaintPicture сам все сделает!!!
Номер ответа: 3
Автор ответа:
Smith
ICQ: adamis@list.ru
Вопросов: 153
Ответов: 3632
Профиль | | #3
Добавлено: 23.12.09 19:15
я думаю можно сделать ещё быстрее
Номер ответа: 4
Автор ответа:
UnDeAdZak
Вопросов: 80
Ответов: 476
Профиль | | #4
Добавлено: 23.12.09 23:03
ага, на дотнэт перейти.
или на с#
Номер ответа: 5
Автор ответа:
Smith
ICQ: adamis@list.ru
Вопросов: 153
Ответов: 3632
Профиль | | #5
Добавлено: 24.12.09 00:27
Так ли велика разница в производительности АПИ в вб6 и в С#?
Номер ответа: 6
Автор ответа:
Саня
ICQ: 553816426
Вопросов: 10
Ответов: 99
Профиль | | #6
Добавлено: 25.12.09 18:06
Доделал!
Все три пункта обрабатывает за 18 секунд.
Но оказалось, что для вышивания ещё необходимо обозначать блоки разными значками и сопоставлять цвета с маркировкой ниток. В принципе, это не очень сложно, но пока я искал информацию по маркировке ниток, оказалось, что таких программ валом. Почти все бесплатные и работают на порядок быстрее. После того как скачал одну из них, к своей руки опустились. Но зато было чем заняться. 
Номер ответа: 7
Автор ответа:
VβÐUηìt
Вопросов: 246
Ответов: 3333
Web-сайт:
Профиль | | #7
Добавлено: 25.12.09 18:37
Та же вася у меня была когда я делал калькулятор. Однако к тому времени, когда я увидел аналоги, я уже написал такого монстра, что они ему в конкуренты не годились. Разве что по размеру файла.
Номер ответа: 8
Автор ответа:
Саня
ICQ: 553816426
Вопросов: 10
Ответов: 99
Профиль | | #8
Добавлено: 25.12.09 19:02
Ой соврал за 8 секунд, но всеравно это слижком медленно посравнению с аналогами.
Номер ответа: 9
Автор ответа:
Smith
ICQ: adamis@list.ru
Вопросов: 153
Ответов: 3632
Профиль | | #9
Добавлено: 25.12.09 20:54
Вот так всегда! Только придумаешь чтонибудь оригинальное, как тутже находится тыща готовых халявных прог.
Номер ответа: 10
Автор ответа:
Саня
ICQ: 553816426
Вопросов: 10
Ответов: 99
Профиль | | #10
Добавлено: 25.12.09 20:59
Это точно.
В общем написание программы нужно начинать с того, что, погуглить нет, на наличие готовых.
Номер ответа: 11
Автор ответа:
Winand
Вопросов: 87
Ответов: 2795
Web-сайт:
Профиль | | #11
Добавлено: 26.12.09 00:46
офтоп. Просто интересно, VBD действительно не знал, что кто-то уже писал калькуляторы до него?
Номер ответа: 12
Автор ответа:
VβÐUηìt
Вопросов: 246
Ответов: 3333
Web-сайт:
Профиль | | #12
Добавлено: 26.12.09 08:37
Та не, знал, просто не знал о наличии, например, вещей, которые, например, умеют работать со временем так же, как с числами То есть не тупо складывать или вычитать, а умножать, делить и т.п. А так конечно знал. Просто я слишком поверхностно оценил конкурентов