![]() |
|
#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 аналитическая алгебра?????))) |