Форум программистов, компьютерный форум, киберфорум
Наши страницы
Delphi: Графика, звук, видео
Войти
Регистрация
Восстановить пароль
 
Рейтинг 5.00/3: Рейтинг темы: голосов - 3, средняя оценка - 5.00
Lilen
0 / 0 / 0
Регистрация: 17.12.2012
Сообщений: 46
1

Работа с графикой

29.09.2015, 21:00. Просмотров 589. Ответов 15
Метки нет (Все метки)

Здравствуйте, вопрос такой, как определить, что в IMAGE нарисована прямая, она может быть под разным углом, быть разного цвета.. Сижу битый чай, ничего на ум не приходит, можете подсказать литературу для работы с графикой в Delphi?
0
QA
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
29.09.2015, 21:00
Ответы с готовыми решениями:

Работа с графикой
Компонент Timer. Нужно реализовать в графическом редакторе Делфи 7. Заранее спасибо

Работа с графикой
Подскажите пожалуйста! Можно ли к функции ellipse(x1,y1,x2,y2) применить прозрачный Brush!! То есть...

Работа с графикой, используя математику
Дано изображение , но оно должно быть закрытое!!!, разбитое на 6 квадратов или больше. Пользователь...

Работа с трехмерной графикой, надо дорисовать планку
Здравствуйте уважаемые программисты! Помогите пожалуйста добавить кромки к фигуре! На рисунке (во...

Работа с графикой
Создать приложение с использование компонента типа TChart - x(в квадрате)+2sin(X). Настроить...

15
popryduhin
30 / 26 / 8
Регистрация: 17.09.2015
Сообщений: 498
Записей в блоге: 6
29.09.2015, 22:10 2
возможно вот такой вариант подойдет.
Я как то занимался созданием кода сравнение с n вероятностью изображения
и попутно написал код с похожей задачей капай в эту сторону

http://storage6.static.itmages.ru/i/...f1a12dba17.png

на скрине видно как линии подошли к краям текста, тоесть можно по неким алгоритмам определить что это прямая.
Кстати Image загружаешь? или а процессе работы программы создаешь?


может пригодится

Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
function TForm1.CompareImages(A, B: TBitmap): Boolean;
var
  i,j : integer;
  p1,p2 : PARGB;
begin
 Result:=false;
 if A.Width<>B.Width then exit;
 if A.Height<>B.Height then exit;
 for i:=0 to A.Height-1 do
 begin
  p1:=A.ScanLine[i];
  p2:=B.ScanLine[i];
  for j:=0 to A.Width-1 do
  begin
   if not ((p1[j].r=p2[j].r) and (p1[j].g=p2[j].g) and (p1[j].b=p2[j].b)) then exit;
  end;
 end;
 Result:=true;
end;
код который сравнивает изображения поточечно

а вот этот код как раз и результат который на скрине

Delphi
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
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
function TForm5.GetSizeChar(BMP: TBitmap): TSizeChar;
const
  white : TColor = clWhite;
var
  x, y : integer;
  p, pBuf    : PARGB;
  ARW, ARH       : array of integer; buf : array of integer;
  min, max        : integer;
  b          : integer; // счетчик буферного массива
  i: Integer;
 
label L1;
begin
  BMP.PixelFormat := pf24bit; // 24 bit
 
  SetLength(ARH, BMP.Height);
  SetLength(ARW, BMP.Width);
 
  {”«Ќјв‰€ћ –ј——“ќяЌ»в‰€ Ж’ќ *ј–“»Ќ*» — ¬в‰€–’”}
  for y := 0 to BMP.Height - 1 do
  begin
    p := BMP.ScanLine[y];
 
    // определ¤ем высоту
    for x := 0 to BMP.Width - 1 do
    begin
      if (p[x].r < 205) and (p[x].g < 205) and (p[x].b < 205) then
      begin
        ARH[y] := y;
      end;
    end;
  end;
 
  b := 1;
  for i := 0 to Length(ARH) - 1 do
  begin
    if ARH[i] <> 0 then
    begin
      setLength(Buf, b);
      Buf[b-1] := ARH[i];
      inc(b);
    end;
  end;
 
  min := buf[0];
  max := buf[0];
  for I := 0 to Length(buf) - 1 do
  begin
    if buf[i] <= min then
    min := buf[i];
 
    if buf[i] >= max then
    max := buf[i];
 
  end;
 
  result.top := min;
  result.height := max;
  //================================================================
    // определ¤ем начало картинки с лева
    for y := 0 to BMP.Height - 1 do
    begin
      p := BMP.ScanLine[y];
      for x := 0 to BMP.Width - 1 do
        begin
          if (p[x].r < 205) and (p[x].g < 205) and (p[x].b < 205) then
          ARW[x] := x;
        end;
    end;
 
    // удал¤ем ¤чейки с нул¤ми
    b := 1; // счетчик буферного массива
    for i := 0 to length(ARW) - 1 do
      if ARW[i] <> 0 then
      begin
        SetLength(buf, b);
        buf[b-1] := 0;
        buf[b-1] := ARW[i];
        inc(b);
      end;
 
    min := buf[0];
    max := buf[0];
    for i := 0 to Length(buf) - 1 do
    begin
      if buf[i] <= min then
      min := buf[i];
 
      if buf[i] >= max then
      max := Buf[i];
    end;
    result.left := min;
    result.width := max;
    //===================================================
end;
0
Миниатюры
Работа с графикой  
krapotkin
3968 / 3325 / 1131
Регистрация: 14.04.2014
Сообщений: 15,946
Записей в блоге: 17
30.09.2015, 08:29 3
на самом деле - отрезок, все точки которого обладают свойством
(x-x0)/dx = (y-y0)/dy
в реальном мире эта формула
((x-x0)/dx) - ((y-y0)/dy) < eps
где eps - например 0.5, dx=X1-X0, dy=Y1-Y0

если она на экране одна, то можно взять две произвольные не белые точки за X0.Y0 и X1.Y1 и
остальные точки прогнать по формуле
если очень много точек уляжется в нее, то это отрезок
0
Lilen
0 / 0 / 0
Регистрация: 17.12.2012
Сообщений: 46
30.09.2015, 13:40  [ТС] 4
Уже есть готовое изображение(отсканированное), его пользователь сам загружает в Image. Вообще истинная суть задачи - сканируется график функции, после чего загружаем его в Image. Очень часто отсканированные изображения находся не под прямым углом, поэтому программа должна распознать координатные оси и осуществить автоматический поворот. Я написала упрощенный вариант задачи, т.к. другого выхода, как отыскание прямой и нахождение угла между нормалью и прямой, не нашла..
0
30.09.2015, 13:40
krapotkin
3968 / 3325 / 1131
Регистрация: 14.04.2014
Сообщений: 15,946
Записей в блоге: 17
30.09.2015, 22:35 5
как ни странно, в общем виде задача решается сложно
в частных случаях всегда можно придумать что-нибудь

пример
предположим, что оси на скане перпендикулярны друг другу, т.е. все, что требуется, это поворот изображения
тогда выводим поперек картинки красную линию и просим пользователя перемещением некоего ползунка повернуть картинку до достижения горизонтали по оси X
это гораздо проще чем автораспознавание
0
popryduhin
30 / 26 / 8
Регистрация: 17.09.2015
Сообщений: 498
Записей в блоге: 6
01.10.2015, 00:05 6
скрин в студию графика, какой график как выглядит? детали
есть у меня готовая функция по повороту в Image
0
Verevkin
2219 / 1189 / 299
Регистрация: 12.03.2015
Сообщений: 6,682
01.10.2015, 09:44 7
Интересно, а для чего данную программу планируется применять на практике? Это ж векторизация растрового изображения - сложная задача; подобные задачи - для группы спецов.
0
popryduhin
30 / 26 / 8
Регистрация: 17.09.2015
Сообщений: 498
Записей в блоге: 6
01.10.2015, 09:46 8
Цитата Сообщение от Verevkin Посмотреть сообщение
Интересно, а для чего данную программу планируется применять на практике? Это ж векторизация растрового изображения - сложная задача; подобные задачи - для группы спецов
А мы, я так понимаю на спецов не тянем?
0
Verevkin
2219 / 1189 / 299
Регистрация: 12.03.2015
Сообщений: 6,682
01.10.2015, 09:53 9
Цитата Сообщение от popryduhin Посмотреть сообщение
я так понимаю
понимай, как хочешь. я этого не говорил, это ты сказал.
0
UI-Maker
38 / 38 / 11
Регистрация: 05.09.2015
Сообщений: 262
01.10.2015, 16:37 10
Это не векторизация, это типа "автоповорот на автовычисленный градус"...
Можно конечно попробовать сделать на коленке, но будет работать правильно через раз (а то и через три). Лучше позволить пользователю мышкой крутить.
0
Lilen
0 / 0 / 0
Регистрация: 17.12.2012
Сообщений: 46
01.10.2015, 18:21  [ТС] 11
Вот, например, "плохой" пользователь отсканировал криво изображение, и хочет осуществить автоматический поворот
0
Миниатюры
Работа с графикой  
Lilen
0 / 0 / 0
Регистрация: 17.12.2012
Сообщений: 46
01.10.2015, 18:24  [ТС] 12
дело в том, что в этом и весь смысл - необходимо все автоматизировать...

Обрезала предыдущее изображение, чтобы быть более объективной, т.к. речь идет о повороте графика
0
Миниатюры
Работа с графикой  
Lilen
0 / 0 / 0
Регистрация: 17.12.2012
Сообщений: 46
01.10.2015, 18:31  [ТС] 13
смысл в том, что это задание и его нужно выполнить...

Добавлено через 2 минуты
кстати, забыла упомянуть, что график может быть любой (в декартовой системе координат)
0
krapotkin
3968 / 3325 / 1131
Регистрация: 14.04.2014
Сообщений: 15,946
Записей в блоге: 17
01.10.2015, 21:01 14
нужны хоть какие-то опорные условия
"это, это и это на графике будет обязательно"...
иначе эту задачу вам в рамках курсовой не решить
0
Lilen
0 / 0 / 0
Регистрация: 17.12.2012
Сообщений: 46
22.11.2015, 12:12  [ТС] 15
в том-то и дело, что на графике даже не может быть оси коордиант!
0
krapotkin
3968 / 3325 / 1131
Регистрация: 14.04.2014
Сообщений: 15,946
Записей в блоге: 17
22.11.2015, 12:42 16
вы как бы не по адресу тогда
разработка программы должна выглядеть так:
вот у меня если вот такой случай, то должно быть вот так, а вот в таком случае вот так, а вот в таком - вот так
это называется выработкой ттребований
дальше идет разработка алгоритма
а потом реализация

где конкретные требования?
0
22.11.2015, 12:42
Answers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
22.11.2015, 12:42

Проблема с графикой?!
Привет, All! пытаюсь вывести спрайт с маской на форму, получается какаято беда пример взял...

Запуталась с графикоЙ!!!!
Сижу над курсовиком, думаю что-то я неправильно начала прогу вроде ((( Суть зачачи в том, нужно...

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


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

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

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