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

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

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

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

Ответ
 
Опции темы Поиск в этой теме
Старый 27.07.2008, 14:14   #1
Roof
Форумчанин
 
Аватар для Roof
 
Регистрация: 01.02.2007
Сообщений: 785
По умолчанию как вывести спектр на форму?

как вывести цветовой спектр на форму или Image?
Изо всей благодати
В руках крепко сжатых
Я донесу только капли
Roof вне форума Ответить с цитированием
Старый 27.07.2008, 15:46   #2
Arigato
Высокая репутация
СуперМодератор
 
Аватар для Arigato
 
Регистрация: 27.07.2008
Сообщений: 15,551
По умолчанию

Использовать свойство Pixels канвы компонента.
Например, Image1.Canvas.Pixels[X,Y] := RGB (R, G, B)
X, Y - координаты пиксела
R, G, B - составляющие цвета (красный, зеленый и синий соответственно). Значение типа byte, т.е. от 0 до 255 для каждой компоненты.
Arigato на форуме Ответить с цитированием
Старый 27.07.2008, 15:52   #3
Roof
Форумчанин
 
Аватар для Roof
 
Регистрация: 01.02.2007
Сообщений: 785
По умолчанию

Вопрос решил, примерно, не совсем красиво, правда, полдучилось...
Выкладываю исходник. Если есть другие варианты решений, то буду благодарен за их предоставление.

Есть также исходник покороче, средствами OpenGl. но это не совсем спектр...
тоже выкладываю...
Вложения
Тип файла: rar spectr na forum.rar (7.6 Кб, 41 просмотров)
Тип файла: rar OpenGl - массив вершин.rar (6.9 Кб, 25 просмотров)
Изо всей благодати
В руках крепко сжатых
Я донесу только капли
Roof вне форума Ответить с цитированием
Старый 27.07.2008, 17:09   #4
Arigato
Высокая репутация
СуперМодератор
 
Аватар для Arigato
 
Регистрация: 27.07.2008
Сообщений: 15,551
По умолчанию

Набросал небольшой примерчик. Выводится непрерывный спектр (в соответствии с порядком следования цветов в радуге).
Масштабирования по размерам окна не производится. Длинна спектра = 6 * 256 = 1536 пикселей. Высота спектра подгоняется под высоту окна.
Код:
function Sgn (I: Integer): Integer;
// Сигнум числа:
begin
  if I < 0 then Result := -1;
  if I = 0 then Result := 0;
  if I > 0 then Result := 1;
end; {func Sgn}

procedure TForm1.FormPaint(Sender: TObject);
var Points: array[1..6] of TColor;
    C, X: Integer;
    R, G, B, NewR, NewG, NewB: Byte;
begin
  Points[1] := RGB (255, 0, 0); // красный
  Points[2] := RGB (255, 255, 0); // желтый
  Points[3] := RGB (0, 255, 0); // зеленый
  Points[4] := RGB (0, 255, 255); // голубой
  Points[5] := RGB (0, 0, 255); // синий
  Points[6] := RGB (255, 0, 255); // фиолетовый
  R := GetRValue (Points[1]);
  G := GetGValue (Points[1]);
  B := GetBValue (Points[1]);
  X := 0;
  for C := 2 to 6 do
  begin
    NewR := GetRValue (Points[C]);
    NewG := GetGValue (Points[C]);
    NewB := GetBValue (Points[C]);
    repeat
      with Canvas do
      begin
        Pen.Color := RGB (R, G, B);
        MoveTo (X, 0);
        LineTo (X, Height);
      end; {with}
      Inc (X);
      Inc (R, Sgn (NewR - R));
      Inc (G, Sgn (NewG - G));
      Inc (B, Sgn (NewB - B));
    until (R = NewR) and (G = NewG) and (B = NewB);
  end; {for}
end;

Последний раз редактировалось Arigato; 27.07.2008 в 17:13.
Arigato на форуме Ответить с цитированием
Старый 27.07.2008, 17:41   #5
Roof
Форумчанин
 
Аватар для Roof
 
Регистрация: 01.02.2007
Сообщений: 785
По умолчанию

да, выглядит намного лучше, да и код короткий
замечательно. спасиб!
Изо всей благодати
В руках крепко сжатых
Я донесу только капли
Roof вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
как вывести число qwerty34 Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 3 25.08.2008 14:14
как вывести текст из БД nikleb PHP 2 27.06.2008 10:13
средствами Delphi на форму вывести погоду выбранного города. Aleksandr Общие вопросы Delphi 12 26.09.2007 00:21
Как изменить стандартную форму на форму любой сложности QwErEn Общие вопросы Delphi 9 08.06.2007 11:44
Как вывести запрос на форму ? Руслан БД в Delphi 2 26.01.2007 17:01