![]()  | 
	
 
  | 
		
			
  | 	
	
	
		
		|||||||
| Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны | 
![]()  | 
	
	
| 
		 | 
	Опции темы | Поиск в этой теме | Опции просмотра | 
| 
		 
			 
			#1  
			
			
			
			
		 
		
		
	 | 
|||
		
		
  | 
|||
| 
	
	
		
			
			 У меня вопрос каким образом можно организовать управление гаммой, палитрой контактностью для canvas???  
		
	
		
		
		
		
		
	
		
		
	
	
	![]()  | 
| 
		 
			 
			#2  
			
			
			
			
		 
		
		
	 | 
||||
		
		
  | 
||||
| 
	
	
		
			
			 А что конкретно ты хочешь сделать? 
		
	
		
		
		
		
			
		
		
		
		
	
		
		
	
	
	Canvas - это просто холст на котором можно рисовать примитивы (линии, фигуры, текст)...  | 
| 
		 
			 
			#3  
			
			
			
			
		 
		
		
	 | 
|||
		
		
  | 
|||
| 
	
	
		
			
			 Короче говоря тема такая, смотри код ниже: 
		
	
		
		
		
		
		
	
		
		
	
	
	Код: 
	var
  bitmap: tbitmap;
begin
  bitmap: tbitmap.create;
  try
    bitmap.assign(image1.picture.bitmap);
    form1.canvas.draw(0, 0, bitmap);
  finally
    bitmap.free;
  end;
end;Поможешь разобраться??? ![]()  | 
| 
		 
			 
			#4  
			
			
			
			
		 
		
		
	 | 
|||
		
		
  | 
|||
| 
	
	
		
			
			 Делать это прямо на канве имхо глупо. Нужно все это сначала проделать с битмапом, а уже потом, выводить его на канву. Для гаммы, контрастности и и т.п. существуют специальные алгоритмы, которые можно найти в инете. 
		
	
		
		
		
		
		
	
		
		
	
	
	 | 
| 
		 
			 
			#5  
			
			
			
			
		 
		
		
	 | 
|||
		
		
  | 
|||
| 
	
	
		
			
			 Цитата: 
	
    Я спрашиваю помощи в первую очередь. | 
| 
		 
			 
			#6  
			
			
			
			
		 
		
		
	 | 
|||
		
		
  | 
|||
| 
	
	
		
			
			 Ну бери каждый пиксель и преобразуй по алгоритму.  
		
	
		
		
		
		
		
	
		
		
	
	
	Код: 
	procedure MyProc(C: TCanvas; P1, P2: TPoint); var i, j: integer; begin for i := P1.y to P2.y do for j := P1.x to P2.x do C.Pixels[j, i] := Algoritm(C.Pixels[j, i]); end;  | 
| 
		 
			 
			#7  
			
			
			
			
		 
		
		
	 | 
|||
		
		
  | 
|||
| 
	
	
		
			
			 Вроде тема подходящая, не стал новую создавать, может кто-то поможет. 
		
	
		
		
		
		
		
		
			Создаю имитацию работы осциллографа. для отображения графиков хочу использовать Image, т.к. есть фотография экрана реального осциллографа с сеткой, т.е. она как подложка. график должен выводится поверх этой подложки. но при попытке рисовать на canve imag`а, вылазит ошибка. возможно ли рисовать в Делфи поверх фотографии в Image? Последний раз редактировалось Sevas55, 09.03.2010 в 16:17.  | 
| 
		 
			 
			#8  
			
			
			
			
		 
		
		
	 | 
|||
		
		
  | 
|||
| 
	
	
		
			
			 возможно, только картинка должна быть битмапом, а у тебя скорее всего джипег, вот и ругается. 
		
	
		
		
		
		
		
	
		
		
	
	
	 | 
| 
		 
			 
			#9  
			
			
			
			
		 
		
		
	 | 
|||
		
		
  | 
|||
| 
	
	
		
			
			 А вот руки оторвать за такое программирование. Да, на TImage можно рисовать, но кто вам сказал, что это правильный путь. Рисовать в таком слцчае надо на TPaintBox. Грузишь свою фотку в буферный объект и потом отрисовываешь ее на TPaintBox и сверху еще свой график. 
		
	
		
		
		
		
		
	
		
		
	
	
	 | 
| 
		 
			 
			#10  
			
			
			
			
		 
		
		
	 | 
||||
		
		
  | 
||||
| 
	
	
		
			
			 Оффтоп: 
		
	
		
		
		
		
			
		
		
		
		
	
		
		
	
	
	А потом еще ругаются: "А чего это у нас такие тормозные программы?"  | 
| 
		 
			 
			#11  
			
			
			
			
		 
		
		
	 | 
|||
		
		
  | 
|||
| 
	
	
		
			
			 Цитата: 
	
   если есть поделитесь. Искал тут, но то ли нет подходящего, то ли не вижу.Цитата: 
	
 хоть и криво но проблему решил, просто график на formcreate не рисуется. за TPaintBox спасибо. поищу, но если не трудно или примерчик, или где читать. Последний раз редактировалось Sevas55, 10.03.2010 в 19:37.  | 
| 
		 
			 
			#12  
			
			
			
			
		 
		
		
	 | 
|||
		
		
  | 
|||
| 
	
	
		
			
			 Примерчик будет типа такой. 
		
	
		
		
		
		
		
	
		
		
	
	
	Код: 
	type
  TForm1 = class(TForm)
    PaintBox1 : TPaintBox;
  ...
  private
    Bmp : TBitmap; // Буфер. Можно JPEG, то тогда будет каждый раз 
                         // преобразовывать. Лучше руками самому все подготовить
    ...
  end;
procedure TForm1.FormCreate(Sender : TObject);
begin
  Bmp := TBitmap.Create;
  Bmp.LoadFromFile('template.bmp');
end;
procedure TForm1.FormDestroy(Sender : TObject);
begin
  Bmp.Free;
end;
procedure TForm1.PaintBox1Paint(Sender : TObject);
begin
  // сначала рисуем подложку
  PaintBox1.Canvas.Draw(0,0,Bmp);
  // А теперь поверх подложки рисуем функцию
  PaintBox1.Canvas.MoveTo(10,10);
  PaintBox1.Canvas.LineTo(100,100);
end;Естественно, это только пример. При этом - самый грубый. Лучше сделать еще один промежуточный буфер, на котором отрисовать подложку и график, а потом уже это копировать в PaintBox целиком одной командой. Ну и рисование функции в примере примитивное - у тебя будет сложнее.  | 
| 
		 
			 
			#13  
			
			
			
			
		 
		
		
	 | 
|||
		
		
  | 
|||
| 
	
	
		
			
			 спасибо за совет!  
		
	
		
		
		
		
		
	
		
		
	
	
	как очищать график на канве? PaintBox1.Canvas.Refresh почемуто не удаляет нарисованное с помощью moveto-lineto. в результате графики накладываются друг на друга при каждом нажатии на SpeedButton Код: 
	procedure TForm1.SpeedButton6Click(Sender: TObject);
begin
       PaintBox1.Canvas.Refresh;
          for x:=0 to 100 do
            begin
              PaintBox1.Canvas.Pen.Color:=cllime;
              PaintBox1.Canvas.moveto(x,214);
              PaintBox1.Canvas.lineto(x+1,random(214));
            end;
end; | 
| 
		 
			 
			#14  
			
			
			
			
		 
		
		
	 | 
|||
		
		
  | 
|||
| 
	
	
		
			
			 Цитата: 
	
  | 
| 
		 
			 
			#15  
			
			
			
			
		 
		
		
	 | 
|||
		
		
  | 
|||
| 
	
	
		
			
			 для отображения графиков в PaintBox разобрался, всем огромное спасибо! 
		
	
		
		
		
		
		
	
		
		
	
	
	для создания внешнего вида осциллографа использую Image, загружая в него фото отдельных частей прибора, т.е. после компиляции фотографии получаются в exe файле проекта, их присутствие в папке с проектом не обязательно. как сделать так чтобы фотография подложки для канвы PaintBox также была недоступна для юзера? чтобы он её случайно/специально не удалил и тогда проект вообще не запустится.  |