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

Delphi Sources



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

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 19.11.2008, 22:09
Sepotok Sepotok вне форума
Прохожий
 
Регистрация: 19.11.2008
Сообщения: 2
Репутация: 10
По умолчанию Сепия

Доброго времени суток! Требуется написать программу, которая при нажатии на соответствующую кнопку, переводила бы заранее загруженное изображение в режим градаций серого, а при нажатии на другую кнопку - режим сепии. Желательно, конечно, было бы получить код соответствующих кнопочек ^^, но и советам буду рад
Ответить с цитированием
  #2  
Старый 19.11.2008, 22:25
Аватар для Admin
Admin Admin вне форума
Администратор
 
Регистрация: 03.10.2005
Адрес: Россия, Москва
Сообщения: 1,551
Версия Delphi: Delphi 7
Репутация: выкл
По умолчанию

Цитата:
Сообщение от Sepotok
Доброго времени суток! Требуется написать программу, которая при нажатии на соответствующую кнопку, переводила бы заранее загруженное изображение в режим градаций серого, а при нажатии на другую кнопку - режим сепии. Желательно, конечно, было бы получить код соответствующих кнопочек ^^, но и советам буду рад
Поищи в исходниках в разделе Графика/Мультимедия, там было нечто подобное.
Ответить с цитированием
  #3  
Старый 25.11.2008, 23:06
Sepotok Sepotok вне форума
Прохожий
 
Регистрация: 19.11.2008
Сообщения: 2
Репутация: 10
По умолчанию

Я вроде проверил все исходники, не нашел там нужного мне. Хотелось бы максимально упрощенный интерфейс, чтобы разобраться именно в технике. С грехом пополам написал это:
Код:
procedure TForm1.Button1Click(Sender: TObject);

var c, ColorPixel:TColor;
R,G,B,T:Byte;
Bi:TBitMap;
X,Y:Word;

begin
IF OpenPictureDialog1.Execute then
begin
bi:=TBitmap.Create;
bi.LoadFromFile(OpenPictureDialog1.FileName);
// получаем размер и Х и Y
X:=bi.Width;
Y:=bi.Height;
// рисуем на форме
Form1.Canvas.Draw(10,10,Bi);
// получаем цвет пикселя:
ColorPixel:=bi.Canvas.Pixels[1,1];
// получаем цвета RGB
c:=ColorPixel;
R:=c mod 256;
c:=c div 256;
G:=c mod 256;
B:=c div 256;
// яркость
T:=(r+g+b) div 3;
bi.free;
end;
end;
Admin: Пользуемся тенгами!!!

Верно ли сие, и где ошибка (программа не перерисовывает картинку).

Последний раз редактировалось Admin, 26.11.2008 в 10:31.
Ответить с цитированием
  #4  
Старый 26.11.2008, 12:27
san-46 san-46 вне форума
Активный
 
Регистрация: 25.04.2008
Сообщения: 383
Репутация: 33
По умолчанию

Код:
var
  Bi : TBitMap;

//загрузка картинки
procedure TForm1.Button1Click(Sender: TObject);
begin
  IF not OpenPictureDialog1.Execute then Exit;
  if bi = nil then bi:=TBitmap.Create;
  bi.LoadFromFile(OpenPictureDialog1.FileName);
end;

//преобразование цветной картинки в картинку с градацией серого
procedure TForm1.Button2Click(Sender: TObject);
var
  C : TColor;
  X, Y, M : Integer;
  R, G, B : Byte;
begin
//1. в двойном цикле получаем цвет каждой точки изображения - C: TColor
//2. разбиваем полученный цвет точки С на R, G, B: byte - составляющие цвета, 
//используя фун-ции R := GetRValue(C) и т.д.
//3. находим M - максимум из R, G, B
//4. устанавливаем новый цвет точки bm.Canvas.Pixels[x, y] := RGB(M, M, M)

  for X := 0 to Bi.Width-1 do
    for Y := 0 to Bi.Height-1 do begin
      C := Bi.Canvas.Pixels[x, y];
      R := GetRValue(C);
      G := GetGValue(C);
      B := GetBValue(C);
      M := Max(R, G);
      Bi.Canvas.Pixels[x, y] := RGB(M, M, M)
    end;

//вывод полученного изображения на форму
  Form1.Canvas.Draw(10,10,Bi);
end;
Для другого оттенка можно поиграться полученным значением "М" (в .RGB(M, M, M)), изменяя это значение для всех или некоторых компонентов цвета.
Для небольших картинок обращение к пикселям (Bi.Canvas.Pixels[x, y]) работает приемлемо быстро, если картинка большая, то к пикселям надо добираться через Bi.ScanLine.
P.S. Не забыть освободить память от "Bi" (Bi.Free), например при выходе из программы.
__________________
Не забывайте делать резервные копии
Ответить с цитированием
  #5  
Старый 26.11.2008, 23:36
ShapaMoe ShapaMoe вне форума
Прохожий
 
Регистрация: 26.11.2008
Сообщения: 1
Репутация: 10
Вопрос Плиз

Привед!
Надо парни помощ!
Мне надо уравнения прямой линии?
как мне отобразить перемищение обьекта из точки X,Y в точку
Mouse.CursorPos.X, Mouse.CursorPos.Y;
p.s аналитическая алгебра?????)))
Ответить с цитированием
Ответ


Delphi Sources

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

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

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

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


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


 

Сайт

Форум

FAQ

Соглашения

Прочее

 

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