![]() |
|
|
#1
|
|||
|
|||
|
Доброго времени суток! Требуется написать программу, которая при нажатии на соответствующую кнопку, переводила бы заранее загруженное изображение в режим градаций серого, а при нажатии на другую кнопку - режим сепии. Желательно, конечно, было бы получить код соответствующих кнопочек ^^, но и советам буду рад
|
|
#2
|
||||
|
||||
|
Цитата:
|
|
#3
|
|||
|
|||
|
Я вроде проверил все исходники, не нашел там нужного мне. Хотелось бы максимально упрощенный интерфейс, чтобы разобраться именно в технике. С грехом пополам написал это:
Код:
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, 26.11.2008 в 10:31. |
|
#4
|
|||
|
|||
|
Код:
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;Для небольших картинок обращение к пикселям (Bi.Canvas.Pixels[x, y]) работает приемлемо быстро, если картинка большая, то к пикселям надо добираться через Bi.ScanLine. P.S. Не забыть освободить память от "Bi" (Bi.Free), например при выходе из программы. |
|
#5
|
|||
|
|||
|
Привед!
Надо парни помощ! Мне надо уравнения прямой линии? как мне отобразить перемищение обьекта из точки X,Y в точку Mouse.CursorPos.X, Mouse.CursorPos.Y; p.s аналитическая алгебра?????))) |