Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Прочее";
Текущий архив: 2007.02.18;
Скачать: [xml.tar.bz2];

Вниз

Можно ли в .NET малой кровью получить регион   Найти похожие ветки 

 
default ©   (2007-01-23 17:27) [0]

для линии рисуемой пером заданной толщины?


 
Skier ©   (2007-01-23 17:30) [1]

может речь о пути идёт ?


 
default ©   (2007-01-23 17:35) [2]

Skier ©   (23.01.07 17:30) [1]
именно регион
в одном примере по алгоритму некоему(возможно Брезенхама) все пиксели прямой пробегают и для них получаю прямоуголники их охватывающие и эти прямоугольники потом объелиняют в регион
но вот хотелось бы проще
вот проверить попадает-ли точка в прямую нарисованную пером заданной толщины можно через IsOutlineVisible, а вот регион создать нету


 
default ©   (2007-01-23 17:39) [3]

в принципе, для отрезка прямой просто это сделать, загнав в объект "GraphicsPath" отрезки прямых выше и ниже данной соединить по концам, например, вертикальными отрезками и по пути получить регион
но нужно и для ломаных, а для ломаных подобное рисование "полоски" сложнее, а в перспективе неплохо было получать регионы и для кривых


 
Stexen ©   (2007-01-23 17:41) [4]


> для линии рисуемой пером заданной толщины?

Что то я задачи немного не понял!


 
default ©   (2007-01-23 17:47) [5]

Stexen ©   (23.01.07 17:41) [4]
вот если ты нарисуешь букву W используя четыре отрезка прямых и нарисуешь эти отрезки пером толщины, например, 5 ты увидишь толстенную букву W(при не сильно большой разрешении и настройках по умолчанию остальных), вот нужно получить регион для области которую занимает эта буква дабл ю


 
Stexen ©   (2007-01-23 17:53) [6]

Всмысле magic wand или что?А кажется понял о чем ты, сейчас вспомню как это делается. Делал я это чудо маской сто пудово!То есть берем область которую примерно занимает буква w примерно так
--
|w|
--

И превращаем ее в двухцветную маску. Далее используя MaskBlt(если память не изменяет делаем что надо с этой областью).
Или я опять что то не так понял?
Ну по крайней мере для работы с magic wand подходило нормально и работало быстро, если ничего не путаю.... Жаль на работе нет исходников своей програмулины


 
default ©   (2007-01-23 18:02) [7]

Stexen ©   (23.01.07 17:53) [6]
хз
я не понял

а ты в своём редакторе какой подход использовал при перерисовке графическх объектов? перерисовывал всю диаграмму с использованием двойной буферизации для отмены моргания или перерисовывал только то что надо использую регионы(ну или хотя бы просто прямоугольники, главно что не всё подряд) ?


 
Stexen ©   (2007-01-23 18:15) [8]


> а ты в своём редакторе какой подход использовал при перерисовке
> графическх объектов? перерисовывал всю диаграмму с использованием
> двойной буферизации для отмены моргания или перерисовывал
> только то что надо использую регионы(ну или хотя бы просто
> прямоугольники, главно что не всё подряд) ?

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


 
default ©   (2007-01-23 18:33) [9]

Stexen ©   (23.01.07 18:15) [8]
некая смесь ERwin и RationalRose
а про цель не скажу:)


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

вот и я этого боялся

кстати, ты меня прежним постом натолкнул на решении
как думаешь неплохо такое?например, имеем поверхность прямоугольную ограничивающую нашу фигуру
все пиксели этой поверхности имею одинаковый цвет
рисуем нашу фигуру в этой ограничивающей поверхности
и пробегаемся по пикселям с цветом нашей фигуры
в .NET минимальный прямоугольник это 2*2 пикселя - это минимальный прямоугольник по которому можно создать регион
вот такими прямоугольниками можно в ТОЧНОСТИ АППРОКСИМИРОВАТЬ нашу фигуру ну и по ним создать регион потом путём объединения


 
default ©   (2007-01-23 18:37) [10]

хотя не в точности будет, но близко очень
я хотел бы вообще один в один получать...но это так, это тоже неплохо


 
default ©   (2007-01-23 18:42) [11]

почему же штатных средств нету...гадство
до IsoutlineVisible ведь додумались!


 
Stexen ©   (2007-01-23 18:46) [12]


> хотя не в точности будет, но близко очень
> я хотел бы вообще один в один получать...но это так, это
> тоже неплохо

Идея оч.хорошая, но у меня первый вопрос: ты как бы из нескольких маленьких регионов будешь создавать один большой???или будешь перерисовывать каждый из них по очереди???В последнем случае по моему не особо хорошо получится, в первом все супер!Однако, встречный вопрос у меня раз у тебя будет известен цвет фигуры и цвет бэкграунда, то грубо говоря у тебя есть готовая маска!!!И используя MaskBlt ты можешь в точности перерисовать нужную тебе под фигуру область!!!!Если не очень ясно объясняю, то могу кинуть пример на мыло, если оставишь и только вечером после 10.Мне кажется он тебе подойдет!


> некая смесь ERwin и RationalRose

Ну я это и хотел узнать!


 
default ©   (2007-01-23 18:58) [13]

Stexen ©   (23.01.07 18:46) [12]

> в первом все супер

ага, он, первый

>  используя MaskBlt ты можешь в точности перерисовать нужную
> тебе под фигуру область!!!!Если не очень ясно объясняю,
> то могу кинуть пример на мыло, если оставишь и только вечером
> после 10.Мне кажется он тебе подойдет!

цвета можно считать известными
вот смотри, представь кривую линию какую-нить заковыристую
и её смещают вниз
область инвалидации равна при этот объединению регионов занимаемых первоначальным и новым положением кривой(прямоугольниками задавать регионы занимаемые кривыми как-то неэкономно)
я смогу получить сделать такое с помощью MaskBlt?


 
default ©   (2007-01-23 19:06) [14]


> прямоугольниками задавать регионы занимаемые кривыми как-
> то неэкономно

или сделать прямоугольником и не париться...вот хрен его знает...


 
default ©   (2007-01-23 19:08) [15]

может поэтому и есть только в .NET возможность узнать попадает ли точка в кривую заданной толщины, а получения региона для неё нету
может специально это, чтобы руки не чесались усложнять простое?


 
Stexen ©   (2007-01-23 19:14) [16]


> вот смотри, представь кривую линию какую-нить заковыристую
> и её смещают вниз


> или сделать прямоугольником и не париться...вот хрен его
> знает...

Не, погоди, не надо делать прямоугольником(одним), раз такой расклад!!!Давай мыло? скину тебе пример про маскблт, он спецом для этого и сделан я думаю!!! :)Мне кажется все равно быстрее будет чем анализировать фигуры по маленьким прямоугольничкам(это у меня сразу с интегралами ассоциируется, плохие воспоминания:) )Да и нервов и времени меньше займет!


 
default ©   (2007-01-23 19:16) [17]

Stexen ©   (23.01.07 19:14) [16]
sudamnepishut@mail.ru
заранее спасибо, посмотрю отвечу


 
Stexen ©   (2007-01-23 19:18) [18]


> sudamnepishut@mail.ru
> заранее спасибо, посмотрю отвечу

часов в 11 скину...


 
default ©   (2007-01-23 19:31) [19]

Stexen ©   (23.01.07 19:18) [18]
на всякий
у меня примерно идеология такая
диаграмма сообщает графическим объектам разные события типа кликов мыши, движения мыши и тд
графоб получил событий и , возможно, ему потребовалось переисовать себя в соответствии с этим событием и он тогда сообщает диаграмме что такой-то регион диаграммы стал инвалидным и форма в соответствии с какими-то своим алгоритмов потом перерисовывает инвалидный регион вызывая методы Paint у графоб(то ли у всех то ли тем кому действительно нужно перерисовать и тд уже решаем диаграмма, нас это не волнует)

вот если брать линию
когда она поняла что её смещают ей надо отрисовать себя в новом положении и она понимает что после ухода её с прежнего места графобъекты которые находились под ней должны перерисоваться сеья в инвалидных кусках и она поэтому сообщает диаграмме регион инвалидации как объединении региона её нынешнего положения и прежнего

точно подойдёт твой метод?


 
Stexen ©   (2007-01-23 19:34) [20]


> точно подойдёт твой метод?

Я думаю, да, но если что посовещаемся!А тебе что завтра проект уже сдавать?


 
default ©   (2007-01-23 19:36) [21]

Stexen ©   (23.01.07 19:34) [20]
да нет
ok, посовещаеся!


 
default ©   (2007-01-24 21:46) [22]

Stexen ©   (23.01.07 19:34) [20]
да что-то медленно тем способом что предлагал
но самое удивительное что тормозит именно GetPixel
GetPixel для сетки 100x100 на пикселов с тормозами - удивительно

Private Function GetLineRegion(ByVal pen As Pen, ByVal p1 As Point, ByVal p2 As Point) As Region
       Dim bmp As New Bitmap(100, 100)
       Dim grfx As Graphics = Graphics.FromImage(bmp)
       Dim gp As New GraphicsPath
       grfx.DrawLine(p, p1, p2)
       For i As Integer = 0 To bmp.Width - 1
           For j As Integer = 0 To bmp.Height - 1
               If bmp.GetPixel(i, j).ToArgb = pen.Color.ToArgb Then
                   gp.AddRectangle(New Rectangle(i, j, 1, 1))
               End If
           Next
       Next
       Dim r As New Region(gp)
       gp.Dispose()
       grfx.Dispose()
       bmp.Dispose()
       Return r
   End Function

   Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
       g.DrawLine(p, 0, 0, 50, 50)
       g.FillRegion(Brushes.Green, GetLineRegion(p, New Point(0, 0), New Point(50, 50)))
   End Sub



Страницы: 1 вся ветка

Форум: "Прочее";
Текущий архив: 2007.02.18;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.51 MB
Время: 0.039 c
15-1169623503
так себе
2007-01-24 10:25
2007.02.18
программирование микроконтроллеров


10-1129036231
KIA
2005-10-11 17:10
2007.02.18
вставка больщой таблицы в WORD


15-1169306037
Mr. D.
2007-01-20 18:13
2007.02.18
Показ "панели задач" при работе TMediaPlayer


15-1169990206
Eraser
2007-01-28 16:16
2007.02.18
Название DLL и копирайт


15-1170099470
hmmm
2007-01-29 22:37
2007.02.18
помогите перевести фразу с eng.





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский