Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - Общий форум

Страница: 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
  1. После того, как все заработало, был повержен в шок, фото, сделанное мобильным 1280х1024 точек, обработалось всего за 17 минут 29 секунд! (Комп проц Athlon 2500, оперативки 2gb)
А ты как думал? :D

Делается все намного проще: уменьшай сначала картинку до своих 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
Делается все намного проще: уменьшай сначала картинку до своих 5x5 пикселей с помощью PaintPicture, затем с помощью того же метода увеличивай до исходного размера. Получишь пункт 1.

ТОЧНО!!! 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-сайт: winandfx.narod.ru
 Профиль | | #11
Добавлено: 26.12.09 00:46
офтоп. Просто интересно, VBD действительно не знал, что кто-то уже писал калькуляторы до него?=)

Ответить

Номер ответа: 12
Автор ответа:
 VβÐUηìt



Вопросов: 246
Ответов: 3333
 Web-сайт: смекаешь.рф
 Профиль | | #12
Добавлено: 26.12.09 08:37
Та не, знал, просто не знал о наличии, например, вещей, которые, например, умеют работать со временем так же, как с числами :) То есть не тупо складывать или вычитать, а умножать, делить и т.п. А так конечно знал. Просто я слишком поверхностно оценил конкурентов :)

Ответить

Страница: 1 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам