|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
Эксперементы с Canvas
У меня вопрос каким образом можно организовать управление гаммой, палитрой контактностью для 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 также была недоступна для юзера? чтобы он её случайно/специально не удалил и тогда проект вообще не запустится. |