Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 18.11.2009, 17:03   #1
Manul_87
Пользователь
 
Регистрация: 30.09.2009
Сообщений: 10
По умолчанию Объединение точек на Visul Basic

Здравствуйте! Подскажите пожалуйста, как на Visul Basic объединить все точки одного цвета в область для дальнейшей обработки?

Цвет каждого пиксела определять научился с помощью GetPixel, каждый цвет забивается в переменную px(x, y) таким образов составляется многомерный массив, где x-ширина, а y-высота изображения.

Какой функцией можно объединить все точки одного цвета?
Manul_87 вне форума Ответить с цитированием
Старый 18.11.2009, 17:08   #2
EducatedFool
Программист VBA
СуперМодератор
 
Аватар для EducatedFool
 
Регистрация: 13.07.2008
Сообщений: 6,858
По умолчанию

А что означает "объединить все точки одного цвета в область"?
Что представляет из себя "область"?

Может, напишите исходную формулировку задачи, чтобы понять, о чём вообще идёт речь?
EducatedFool вне форума Ответить с цитированием
Старый 18.11.2009, 17:20   #3
Manul_87
Пользователь
 
Регистрация: 30.09.2009
Сообщений: 10
По умолчанию

В итоге нужно будет получить из цветного изображения, штрихованное, причём штриховка будет соответствовать определённому диапазону цветов.

Но прежде чем штриховать нужно объединить точки с одинаковым цветом, работая с каждым пикселем в отдельности штриховать нельзя.
Manul_87 вне форума Ответить с цитированием
Старый 18.11.2009, 17:23   #4
EducatedFool
Программист VBA
СуперМодератор
 
Аватар для EducatedFool
 
Регистрация: 13.07.2008
Сообщений: 6,858
По умолчанию

Почему это надо сделать именно в Visual Basic?

Алгоритм весьма сложен - проще уж использовать VBA в Corel, да и там всё это непросто реализуется.

Для чего всё это надо?
EducatedFool вне форума Ответить с цитированием
Старый 18.11.2009, 17:33   #5
Manul_87
Пользователь
 
Регистрация: 30.09.2009
Сообщений: 10
По умолчанию

Решение данной задачи необходимо для автоматизации подготовки изображений для записи цифровых голограмм. В дальнейшем штрихованная картинка будет выводиться на ЖК-матрицу, работающую на просвет... ну и тем самым в следствии интерференции на пластинку записывается галограмма
Manul_87 вне форума Ответить с цитированием
Старый 18.11.2009, 17:41   #6
EducatedFool
Программист VBA
СуперМодератор
 
Аватар для EducatedFool
 
Регистрация: 13.07.2008
Сообщений: 6,858
По умолчанию

А если для решения задачи использовать какой-либо плагин для Photoshop-а или Corel-а?

На Visual Basic реализовать подобное будет сложновато...
EducatedFool вне форума Ответить с цитированием
Старый 18.11.2009, 17:48   #7
Manul_87
Пользователь
 
Регистрация: 30.09.2009
Сообщений: 10
По умолчанию

С Corel пробовал там всё проще, но дело в том что в программе изображение должно быть итогом обработки 2-х картинок. одного цветного, а второго grayscale (т.е. градации серого). Путём сопоставления картинок (a) и (b) должно получиться изображение (c), где угол наклона штриховки задаётся из базы данных градациями серого на 1-й картинке, а период - цветом на 2-й.

Через Corel и Vba вторую картинку не залить.
Изображения
Тип файла: bmp vb.bmp (491.6 Кб, 120 просмотров)

Последний раз редактировалось Manul_87; 18.11.2009 в 17:51.
Manul_87 вне форума Ответить с цитированием
Старый 18.11.2009, 17:57   #8
EducatedFool
Программист VBA
СуперМодератор
 
Аватар для EducatedFool
 
Регистрация: 13.07.2008
Сообщений: 6,858
По умолчанию

В Corel PhotoPaint есть инструмент под названием "Волшебная палочка", который одним нажатием позволяет выделять отдельные области рисунка:



Если прикрутить сюда макрос - появляются шансы на относительно простое решение задачи.
EducatedFool вне форума Ответить с цитированием
Старый 18.11.2009, 18:19   #9
Manul_87
Пользователь
 
Регистрация: 30.09.2009
Сообщений: 10
По умолчанию

а как там можно будет подгрузить второе изображение для обработки? Ведь картинка должна быть итогом обработки 2-х картинок
Manul_87 вне форума Ответить с цитированием
Старый 18.11.2009, 18:59   #10
Manul_87
Пользователь
 
Регистрация: 30.09.2009
Сообщений: 10
По умолчанию

В Corel получается приблизительно такой код


PHP код:
    Dim x As Integer
    Dim y 
As Integer
    
    pruw 
ActivePage.Width
    pruh 
ActivePage.Height
    
    
    ReDim s
(1 To 51 To 5)
    
    
ReDim poi(1 To 51 To 5)
    
ReDim piu(1 To 51 To 5)
    
 
    
ReDim Widthk(1 To 5)
    
ReDim Heightk(1 To 5)
    
    
shn 3

    
For 1 To 5
    
For 1 To 5
    
    Widthk
(x) = x
    Heightk
(y) = y
    poi
(xy) = ActivePage.Point(Widthk(x), Heightk(y))
    
Set s(xy) = ActivePage.CustomCommand("Boundary""SmartFill"Widthk(x), Heightk(y), CreateCMYKColor(0000), 0#, CreateCMYKColor(0, 0, 0, 0))

shn shn 3
    s
(xy).Fill.UniformColor.CMYKAssign 0000
    s
(xy).Fill.ApplyPostscriptFill("Hatching").SetProperties 75755shn0
    
Next y
    Next x 

Для наглядности поставил: shn - наклон штриховки, shn - каждый раз больше на 3.

Но вот проблема: как сделать так чтобы скрипт не выполнялся каждый раз для уже обработанных областей, иначе макрос виснет.

Пробовал сравнить s(x, y):

PHP код:
    If s(xy) = s(1yThen
    piu
(xy) = 1
    
ElseIf s(xy) = s(x1Then piu(xy) = 1
    
Else
    
piu(xy) = 0
    End 
If
   
    If 
piu(xy) = 0 Then

Тут весь скрипт
...

    
End If 
Изображение прекращает обрабатываться вообще.

Последний раз редактировалось Manul_87; 18.11.2009 в 19:01.
Manul_87 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
определить радиус и центр окружности, на кот. лежит наиб.число точек заданного на плоскости мн-ва точек) kcю Помощь студентам 0 17.11.2009 19:50
множество точек))) kcю Помощь студентам 0 11.11.2009 21:32
множества точек kcю Помощь студентам 13 08.11.2009 11:48
Нахождение седловых точек ViNcHeStEr Помощь студентам 4 08.04.2009 18:42