Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > Мультимедиа
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #16  
Старый 27.08.2012, 19:52
Dmitry_DM Dmitry_DM вне форума
Активный
 
Регистрация: 07.08.2012
Сообщения: 258
Версия Delphi: Delphi 7
Репутация: 11
По умолчанию

Цитата:
Сообщение от cotseec
with PaintBox1, canvas нужно не "запятая", а "точка" и зачем использовать with, если потом все равно обращение?
Код:
PaintBox1.Canvas.MoveTo(X, DY);
    PaintBox1.Canvas.LineTo(X, Y)
сам PaintBox1 должен лежать (или создаваясь динамически, быть дочерним по отношению)
рисовать (выводить рисунок) в событии PaintBox1.OnPaint
Я объявил переменные
Код:
WavInfo: TWavInfo;
  KX, KY: Extended;
  i, X, Y, DY, Chanel: Integer;
как глобальные и сделал такой код:
Код:
procedure TForm1.Button_WAVgraphClick(Sender: TObject);
begin
  KX := 1; // Коэффициент пропорциональности по абсциссе
  KY := 0.01; // Коэффициент пропорциональности по ординате
  DY := Height div 2; // Смещение по ординате
  Chanel := 0; // Номер рисуемого канала
  Repaint;

  for i := Low(WavInfo.Samples) to High(WavInfo.Samples) do
  begin
    X := Trunc(KX * i);
    Y := Trunc(KY * Smallint(WavInfo.Samples[i, Chanel]) + DY);
end;
end;

procedure TForm1.PaintBox1Paint(Sender: TObject);
begin
PaintBox1.Canvas.MoveTo(X, DY);
PaintBox1.Canvas.LineTo(X, Y);
end;
На TabSheet3, ясное дело, положил компонент PaintBox1. Ниже кнопку Button_WAVgraphClick, при нажатии на нее должна рисоваться гистограмма, но ничего не происходит. Что не так. Не имеет ли значение где будет находиться процедуры
Код:
procedure TForm1.Button_WAVgraphClick(Sender: TObject);

и
Код:
procedure TForm1.PaintBox1Paint(Sender: TObject);
Ответить с цитированием
  #17  
Старый 27.08.2012, 21:41
Аватар для cotseec
cotseec cotseec вне форума
Активный
 
Регистрация: 16.07.2008
Сообщения: 353
Версия Delphi: D7,TDE06,RAD09
Репутация: 1443
По умолчанию

что-то типа такого (см. вложение)
Вложения
Тип файла: zip Example.zip (8.0 Кбайт, 42 просмотров)
__________________
Понять, что хочет заказчик - бесценно, ведь он платит MasterCard
Ответить с цитированием
  #18  
Старый 27.08.2012, 22:17
Dmitry_DM Dmitry_DM вне форума
Активный
 
Регистрация: 07.08.2012
Сообщения: 258
Версия Delphi: Delphi 7
Репутация: 11
По умолчанию

Цитата:
Сообщение от cotseec
что-то типа такого (см. вложение)
Этот пример - да, работает. Рисует. Может просто не работает этот код?
Код:
var
  WavInfo: TWavInfo;
  KX, KY: Extended;
  i, X, Y, DY, Chanel: Integer;
begin
  KX := 1; // Коэффициент пропорциональности по абсциссе
  KY := 0.01; // Коэффициент пропорциональности по ординате
  DY := Height div 2; // Смещение по ординате
  Chanel := 0; // Номер рисуемого канала
  Repaint;
 
  for i := Low(WavInfo.Samples) to High(WavInfo.Samples) do
  begin
    X := Trunc(KX * i);
    Y := Trunc(KY * Smallint(WavInfo.Samples[i, Chanel]) + DY);
 
    Canvas.MoveTo(X, DY);
    Canvas.LineTo(X, Y);
  end;
end;
Или может ее надо правильно разделить эту процедуру на
Код:
procedure TForm1.Button_WAVgraphClick(Sender: TObject);
и на
Код:
procedure TForm2.PaintBox1Paint(Sender: TObject);
Как в этом примере:
Код:
procedure TForm1.Button_WAVgraphClick(Sender: TObject);
begin
  Randomize;
  for i:=1 to 1024 do
    PointArray[i-1]:=Random(PaintBox1.Height);

  PaintBox1.Repaint;
end;
и
Код:
procedure TForm1.PaintBox1Paint(Sender: TObject);
var
  i:integer;
  DX:integer;
begin
  DX:=1;
  PaintBox1.Canvas.MoveTo(0,0);
  for i:=0 to 1023 do
  begin
    PaintBox1.Canvas.LineTo(DX*i,PointArray[i]);
    PaintBox1.Canvas.MoveTo(DX*i,0);
  end;
end;
Если да, то как? Но я больше склоняюсь к тому, что в коде от poli-smen есть какой-то нюанс, который не позволяет строить график.
Ответить с цитированием
  #19  
Старый 27.08.2012, 22:26
Аватар для angvelem
angvelem angvelem вне форума
.
 
Регистрация: 18.05.2011
Адрес: Омск
Сообщения: 3,970
Версия Delphi: 3,5,7,10,12,XE2
Репутация: выкл
По умолчанию

Садисты, использовать TChart, брр.



Собственно сама программа. Следует рассматривать её как учебный пример, а не как законченный продукт.

histogram.rar
__________________
Je venus de nulle part
55.026263 с.ш., 73.397636 в.д.

Последний раз редактировалось angvelem, 30.08.2012 в 02:32.
Ответить с цитированием
Эти 2 пользователя(ей) сказали Спасибо angvelem за это полезное сообщение:
Dmitry_DM (30.08.2012), poli-smen (31.08.2012)
  #20  
Старый 27.08.2012, 22:38
Аватар для YVitaliy
YVitaliy YVitaliy вне форума
Местный
 
Регистрация: 14.12.2011
Сообщения: 481
Версия Delphi: Borland Delphi7
Репутация: 17
По умолчанию

Цитата:
Сообщение от angvelem
Садисты, использовать TChart, брр.
.....
Я его как на форму кинул, так страшно стало - а вдруг что-то не то кликну...
Ответить с цитированием
  #21  
Старый 27.08.2012, 22:45
Dmitry_DM Dmitry_DM вне форума
Активный
 
Регистрация: 07.08.2012
Сообщения: 258
Версия Delphi: Delphi 7
Репутация: 11
По умолчанию

Цитата:
Сообщение от YVitaliy
Я его как на форму кинул, так страшно стало - а вдруг что-то не то кликну...
Как красиво! Можно так в моей программе сделать? Как, как, очень понравилось?!!!
Ответить с цитированием
  #22  
Старый 27.08.2012, 22:52
Аватар для angvelem
angvelem angvelem вне форума
.
 
Регистрация: 18.05.2011
Адрес: Омск
Сообщения: 3,970
Версия Delphi: 3,5,7,10,12,XE2
Репутация: выкл
По умолчанию

Можно, смотри выше.
__________________
Je venus de nulle part
55.026263 с.ш., 73.397636 в.д.
Ответить с цитированием
  #23  
Старый 27.08.2012, 22:56
Dmitry_DM Dmitry_DM вне форума
Активный
 
Регистрация: 07.08.2012
Сообщения: 258
Версия Delphi: Delphi 7
Репутация: 11
По умолчанию

Цитата:
Сообщение от angvelem
Можно, смотри выше.
Так оно на ассемблере.
Ответить с цитированием
  #24  
Старый 27.08.2012, 22:59
Аватар для angvelem
angvelem angvelem вне форума
.
 
Регистрация: 18.05.2011
Адрес: Омск
Сообщения: 3,970
Версия Delphi: 3,5,7,10,12,XE2
Репутация: выкл
По умолчанию

Я для себя писал и для автора bass, на Дельфи не планировал переделывать, хотя это и не сложно.
__________________
Je venus de nulle part
55.026263 с.ш., 73.397636 в.д.
Ответить с цитированием
  #25  
Старый 27.08.2012, 23:00
Аватар для YVitaliy
YVitaliy YVitaliy вне форума
Местный
 
Регистрация: 14.12.2011
Сообщения: 481
Версия Delphi: Borland Delphi7
Репутация: 17
По умолчанию

А у тебя рисование по клику на Button_WAVgraph должно работать? Тогда зачем разделяешь? Рисование должно проходить в одном цикле с подсчетом X и Y, а у тебя рисует только первую точку и последнюю - весь цикл проходит отдельно от рисования. Или сохраняй точки в массив, как в примере cotseec.
Ответить с цитированием
  #26  
Старый 27.08.2012, 23:01
Аватар для YVitaliy
YVitaliy YVitaliy вне форума
Местный
 
Регистрация: 14.12.2011
Сообщения: 481
Версия Delphi: Borland Delphi7
Репутация: 17
По умолчанию

Цитата:
Сообщение от Dmitry_DM
Как красиво! Можно так в моей программе сделать? Как, как, очень понравилось?!!!
Ну, я же сначала писал, что
Цитата:
рисовать на канве прямоугольниками
Ответить с цитированием
  #27  
Старый 28.08.2012, 01:05
Dmitry_DM Dmitry_DM вне форума
Активный
 
Регистрация: 07.08.2012
Сообщения: 258
Версия Delphi: Delphi 7
Репутация: 11
По умолчанию

Я бы хотел немного теории: в чем измеряются вот эти самые колебания wav? И в общем: расскажите про этот график. Чем отличается график одноканального от двухканального wav? И почему мы используем именно двумерный массив? И что за значения подразумеваются под X и Y? И еще: что это за цифры, по которым и строится график?
Left-0 Right-0
Left-2 Right-2
Left-7 Right-7
Left-16 Right-16
Left-30 Right-30
Left-47 Right-47
Left-67 Right-67
Left-88 Right-88
Left-108 Right-108
Left-128 Right-128
Left-150 Right-150
Left-175 Right-175
Left-202 Right-202
Left-229 Right-229
...
Заранее благодарен за ответы!
Ответить с цитированием
  #28  
Старый 29.08.2012, 01:09
Dmitry_DM Dmitry_DM вне форума
Активный
 
Регистрация: 07.08.2012
Сообщения: 258
Версия Delphi: Delphi 7
Репутация: 11
По умолчанию

Н, пожалуйста, помогите мне! Поймите, что времени у меня не много, всего до зимы, а работы еще много. Так помогите мне построить этот график и гистограмму. Я очень вас прошу !
Ответить с цитированием
  #29  
Старый 29.08.2012, 01:21
Аватар для angvelem
angvelem angvelem вне форума
.
 
Регистрация: 18.05.2011
Адрес: Омск
Сообщения: 3,970
Версия Delphi: 3,5,7,10,12,XE2
Репутация: выкл
По умолчанию

Если график на рисунке устраивает, я перепишу с ассемблера на Дельфи.
__________________
Je venus de nulle part
55.026263 с.ш., 73.397636 в.д.
Ответить с цитированием
  #30  
Старый 29.08.2012, 01:28
Dmitry_DM Dmitry_DM вне форума
Активный
 
Регистрация: 07.08.2012
Сообщения: 258
Версия Delphi: Delphi 7
Репутация: 11
По умолчанию

Цитата:
Сообщение от angvelem
Если график на рисунке устраивает, я перепишу с ассемблера на Дельфи.
Конечно устраивает! Я ж ранее писал, что безмерно понравился. Это будет супер, если вы перепишите код на делфи. Буду бесконечно благодарен.
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 04:55.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter