Форум программистов, компьютерный форум, киберфорум
Visual Basic .NET
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.67/6: Рейтинг темы: голосов - 6, средняя оценка - 4.67
0 / 0 / 0
Регистрация: 18.03.2011
Сообщений: 11
1

Заливка фигур из файла BMP

03.01.2014, 15:50. Показов 1167. Ответов 9
Метки нет (Все метки)

Помогите пожалуйста, я новичок. Есть bmp файл с неизвестной фигурой, её надо залить другим цветом. Как это реализовать?
0

Помощь в написании контрольных, курсовых и дипломных работ здесь.

Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
03.01.2014, 15:50
Ответы с готовыми решениями:

Рандомная заливка фигур
Хочу залить каждый ректангл разной кистью, но в итоге все получаются одинаковой заливки. Что не...

Текстурная заливка фигур в Graphics
Можно ли при рисовании прямоугольника(или любой другой фигуры) с помощью Graphics, залить её не...

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

Заливка фигур
Помогите, как залить эту фигуру. Заливает весь фон. uses graphABC; var x0,y0:integer; begin ...

9
Заблокирован
03.01.2014, 16:28 2
Professor!, прикрепите этот самый файл для полного обзора.
0
0 / 0 / 0
Регистрация: 18.03.2011
Сообщений: 11
03.01.2014, 19:13  [ТС] 3
Любой растровый редактор функция заливка... Есть многоугольник черного цвета по не известным координатам по щелчку мыши на одной его точки сменить ему цвет.
Понимаю что если знать вершины то задача решается, или перебором каждого пикселя. Но перебором это очень медленно...
0
829 / 637 / 100
Регистрация: 20.08.2013
Сообщений: 2,524
03.01.2014, 20:36 4
Лучший ответ Сообщение было отмечено как решение

Решение

Цитата Сообщение от Professor! Посмотреть сообщение
Но перебором это очень медленно...
Это достаточно быстро. Используй LockBits/UnlockBits, Scan0 и следующий алгоритм:
VB.NET
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
  Private Function DfsSize(ByRef Matrix(,) As Integer, ByVal Y As Integer, ByVal X As Integer, ByVal Connect4 As Boolean, ByVal OldVal As Integer, ByVal NewVal As Integer) As Integer
    Dim Res As Integer = 0, R As Integer
    Dim St As New Stack(Of DfsInfo)
 
    St.Push(New DfsInfo(Y, X))
 
    Do While St.Count
      St.Pop().GetInfo(Y, X, R)
 
      If R = -1 Then
        R = X + 1
        Do While Matrix(Y, X) = OldVal
          Matrix(Y, X) = NewVal
          Res += 1
          X -= 1
        Loop
        Do While Matrix(Y, R) = OldVal
          Matrix(Y, R) = NewVal
          Res += 1
          R += 1
        Loop
        If Connect4 Then
          X += 1
          R -= 1
        End If
      End If
 
      If X + 1 <= R Then St.Push(New DfsInfo(Y, X + 1, R))
      If Matrix(Y - 1, X) = OldVal Then St.Push(New DfsInfo(Y - 1, X))
      If Matrix(Y + 1, X) = OldVal Then St.Push(New DfsInfo(Y + 1, X))
    Loop
 
    Return Res
  End Function
3
0 / 0 / 0
Регистрация: 18.03.2011
Сообщений: 11
03.01.2014, 20:46  [ТС] 5
Простите за такой вопрос но "DfsInfo" как объявлять?
"Ошибка 3 Тип "DfsInfo" не определен."
0
829 / 637 / 100
Регистрация: 20.08.2013
Сообщений: 2,524
03.01.2014, 22:44 6
Professor!, я написал "алгоритм", а не "код" - рассчитывая, что ты поймёшь что оно делает и напишешь аналогично

VB.NET
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
  Private Structure DfsInfo
    Dim Y As Integer, X As Integer, R As Integer
 
    Public Sub New(ByVal Y As Integer, ByVal X As Integer, Optional ByVal R As Integer = -1)
      With Me
        .Y = Y
        .X = X
        .R = R
      End With
    End Sub
 
    Public Sub GetInfo(ByRef Y As Integer, ByRef X As Integer, ByRef R As Integer)
      With Me
        Y = .Y
        X = .X
        R = .R
      End With
    End Sub
  End Structure
0
0 / 0 / 0
Регистрация: 18.03.2011
Сообщений: 11
03.01.2014, 23:56  [ТС] 7
Большое Вам спасибо. Но я новичок... Но очень сильно хочется разобраться. Matrix(,) - в этот параметр записывается вся картинка по байтно? Х,У координаты. Connect4, OldVal, NewVal - ?

Добавлено через 11 минут
Тут речь идет о перемещение объекта который известен, который нарисовал сам пользователь? Правильно понял Qwertiy
0
829 / 637 / 100
Регистрация: 20.08.2013
Сообщений: 2,524
03.01.2014, 23:58 8
Цитата Сообщение от Professor! Посмотреть сообщение
Но очень сильно хочется разобраться.
К сожалению, складывается ощущение, что хочется скопипастить код, а не разобраться...

Цитата Сообщение от Professor! Посмотреть сообщение
Matrix(,) - в этот параметр записывается вся картинка по байтно?
Хм.. У меня в нём было нечто другое. В любом случае, должно быть очевидно, что это пиксели изображения в каком-то представлении.
Впрочем, если использовать формат 32 bpp и Scan0 сокрировать в массив int'ов, то получится нечто похожее, за исключением того, что массив выйдет одномерный и придётся вычислять индексы. Хотя можно обернуть в класс, реализующий преобразование в соответствующем операторе.

Цитата Сообщение от Professor! Посмотреть сообщение
Х,У координаты. Connect4, OldVal, NewVal - ?
X, Y - координаты точки, из которой начинаем закрашивание.
Connect4 - четырёхсвязная область (true) или восьмисвязная (false).
OldVal, NewVal - старое и новое значение цвета соответственно - должно бы быть очевидно.
Возвращаемое значение - площадь области.
0
0 / 0 / 0
Регистрация: 18.03.2011
Сообщений: 11
05.01.2014, 10:33  [ТС] 9
Я не хочу просто с копировать, на самом деле хочу разобраться.
Обычно я не спрашиваю пытаюсь всё решить сам, но если на ступил ступор лучше спросить. С графикой у меня всегда были проблемы, сейчас мне необходимо очень сильно разобраться совсем этим.
Помогите мне разобраться полностью. Так сказать устранить мои пробелы в области графики.
Matrix(,) - какие там данные должны быть?
Просто чтоб сейчас понять полностью как он работает надо это запустить а у меня не получается.

Добавлено через 13 часов 15 минут
http://www.vb-helper.com/howto... flood.html - Красивый пример. Надеюсь он поможет не только мне.
0
829 / 637 / 100
Регистрация: 20.08.2013
Сообщений: 2,524
05.01.2014, 12:42 10
Цитата Сообщение от Professor! Посмотреть сообщение
Matrix(,) - какие там данные должны быть?
Цвета с дополнительным условием, что края (периметр в 1 пиксель) точно не заливаются.
Чтобы убрать это условие надо проверять выход за границы матрицы.

Цитата Сообщение от Professor! Посмотреть сообщение
http://www.vb-helper.com/howto... flood.html - Красивый пример. Надеюсь он поможет не только мне.
Во-первых, там Stack надо заменить на Stack(Of Point). Во-вторых, при 32 bpp лучше работать с int'ами, а не с байтами. Ну и наконец, расскажи хотя бы, чем он красивее моего? У меня более оптимальный алгоритм с дополнительной оптимизацией на размер стека.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
05.01.2014, 12:42

Помощь в написании контрольных, курсовых и дипломных работ здесь.

Заливка произвольных фигур
Всем здравствуйте. Возникла проблема с заливкой в OpenGL. Использую C#, WF, Tao.OpenGL. Есть...

Заливка цветмо фигур
Добрый вечер всем. дали задания самостоятельно разобраться с графическим модулем, как Д/з задали...

Заливка файла
Скажите пожалуйста, можно ли на сайте сделать такую фишку, чтобы при заходе на него у пользователя...

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

заливка файла
здравствуйте! мне нужно среди прочего заливка пользователем файла на сервер. &lt;form...

Заливка файла на FTP
Добрый день. Прошу помощи. Уже 3й день мучаюсь. Столкнулся с проблемой создания файла на фтп....


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.