![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | 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 также была недоступна для юзера? чтобы он её случайно/специально не удалил и тогда проект вообще не запустится. |