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