Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Мультимедиа в Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 25.03.2011, 00:20   #1
rokotokobot
Пользователь
 
Регистрация: 25.03.2011
Сообщений: 14
По умолчанию Рисование поверх картинки

Доброго времени суток. Подскажите с проблемкой. Не могу понять никак, как решить её.

Загружаю в Image картинку jpg. теперь хочу сделать такую вещь, что-то типо стандартного выделения области, когда пользователь делает маусДаун и тянет в какую-нить сторону то рисуется прямоугольник с начальной вершиной в точке маусДаун и до точки текущего положения курсора.

Т.к. подгружаю джипег, следовательно в этом имейдже уже нельзя рисовать. Пытался ставить второй Image поверх и рисовать в нем, но фон он выставляет белый, даже если ставить флаг Transparent=true; Да и даже когда белый фон, при каждом рисовании почему-то имейдж не обновлялся (стопка квадратов рисовалось), даже используя стандартные методы как Refresh.

что хотелось бы узнать:

1. как нарисовать одно изображение поверх другого.
2. как сделать прозрачный фон у image
3. как заставить image обновляться

Спасибо =)
rokotokobot вне форума Ответить с цитированием
Старый 25.03.2011, 12:12   #2
x128
Форумчанин
 
Регистрация: 03.02.2010
Сообщений: 178
По умолчанию

Преобразовывай джипег в битмап и рисуй на имидже.
например так:
Код:
jpg:=TJPEGImage.Create;
jpg.LoadFromFile('моя картика.jpg');
Image1.Picture.Bitmap.Assign(jpg);
jpg.Free;
x128 вне форума Ответить с цитированием
Старый 25.03.2011, 12:41   #3
ArtGrek
DelphiProger
Участник клуба
 
Аватар для ArtGrek
 
Регистрация: 14.11.2010
Сообщений: 1,023
По умолчанию

четко понял что работаете с картинками, больше ниичего
Цитата:
маусДаун и тянет в какую-нить сторону то рисуется прямоугольник
с начальной вершиной в точке маусДаун и до точки текущего положения курсора.
метод резинового выделения в гугле
Цитата:
3. как заставить image обновляться
Repaint;
Цитата:
2. как сделать прозрачный фон у image
Transparent := True;
Цитата:
1. как нарисовать одно изображение поверх другого.
что например?
VirusN13
ArtGrek вне форума Ответить с цитированием
Старый 25.03.2011, 19:18   #4
rokotokobot
Пользователь
 
Регистрация: 25.03.2011
Сообщений: 14
По умолчанию

Цитата:
Сообщение от ArtGrek Посмотреть сообщение
Repaint;
Я писал, что стандартные методы обновления не помогают.

Цитата:
Сообщение от ArtGrek Посмотреть сообщение
Transparent := True;
я вроде как писал что выставлять этот флаг не помагает.

Цитата:
Сообщение от ArtGrek Посмотреть сообщение
что например?
например квадратную рамку поверх картинки

rokotokobot вне форума Ответить с цитированием
Старый 26.03.2011, 23:54   #5
rokotokobot
Пользователь
 
Регистрация: 25.03.2011
Сообщений: 14
По умолчанию

Третий вопрос снят, актуален первый+второй вопрос.
Есть два Имеджа, один поверх другого, в "нижний" подгружается картинка джипег (что означает что в нем недьзя рисовать). Нужно рисовать в верхнем. Но при рисовании в канвасе фон заливается белым цветом и соответственно не видно нижнюю картинку. Каааааак сделать так чтобы фон не заливался белым, а оставался прозрачным?
rokotokobot вне форума Ответить с цитированием
Старый 27.03.2011, 01:33   #6
rokotokobot
Пользователь
 
Регистрация: 25.03.2011
Сообщений: 14
По умолчанию

Тема не актуальна, но если кому понадобиться сделал так, по оптимальности понимаю что далеко не идеально, но лучше так чем никак.

Сделал так. Отказался от двух имеджев, в один подгружаю джепег преобразовывая его в бмр, вот так примерно.

Код:
var
  img: TJPEGImage;
  bmp: TBitmap;

img := TJPEGImage.Create;
img.LoadFromFile('...My.Jpg');
bmp := TBitmap.Create;
bmp.Assign(img);
Image1.Picture.Bitmap.Assign(bmp);
потом при событии каком-то, которое нужо перерисовывание делал так
Код:
Image1.Picture:=nil;
Image1.Picture.Bitmap.Assign(bmp);
Image1.Canvas... //рисовал что надо

Последний раз редактировалось rokotokobot; 27.03.2011 в 12:35.
rokotokobot вне форума Ответить с цитированием
Старый 27.03.2011, 05:03   #7
ArtGrek
DelphiProger
Участник клуба
 
Аватар для ArtGrek
 
Регистрация: 14.11.2010
Сообщений: 1,023
По умолчанию

так получается, что всегда, читаю вашу тему глубокои ночью, и уже сильно не соображаю, но
для того что б рисовать на джпг загруженом в имадже, надо обращаться к
Код:
Image1.LoadFromFile('...My.Jpg');
Image1.Picture.BitMap.Canvas.Brush := bsCleare; //что б фон не был белым, задаите стил кисти соответствуюшии
Image1.Picture.BitMap.Canvas.????? ....
VirusN13
ArtGrek вне форума Ответить с цитированием
Старый 27.03.2011, 12:33   #8
rokotokobot
Пользователь
 
Регистрация: 25.03.2011
Сообщений: 14
По умолчанию

Может я чего не понимаю, но как можно будет рисовать кистью которая будет цветом - "чистым"?
rokotokobot вне форума Ответить с цитированием
Старый 11.05.2011, 09:19   #9
Rigard_sh45rus
Новичок
Джуниор
 
Регистрация: 11.05.2011
Сообщений: 2
По умолчанию

Цитата:
Сообщение от ArtGrek Посмотреть сообщение
так получается, что всегда, читаю вашу тему глубокои ночью, и уже сильно не соображаю, но
для того что б рисовать на джпг загруженом в имадже, надо обращаться к
Код:
Image1.LoadFromFile('...My.Jpg');
Image1.Picture.BitMap.Canvas.Brush := bsCleare; //что б фон не был белым, задаите стил кисти соответствуюшии
Image1.Picture.BitMap.Canvas.????? ....
Я сделал так рисование прозрачного квадрата. Может кому пригодится.

Код:
 Image1.Canvas.Pen.Color:= clRed;
  Image1.Canvas.Pen.Mode:= pmNotXor;
  Image1.Canvas.Pen.Width:=2;
 Image1.Canvas.Rectangle(0,0,500,500);
Pen.Color:= clRed - цвет рамки красный
Pen.Mode:= pmNotXor - Сделает нарисованный квадрат прозрачным
Pen.Width:=2 - Ширина рамки
Rectangle(0,0,500,500) - рисуем сам квадрат
Rigard_sh45rus вне форума Ответить с цитированием
Старый 18.02.2012, 20:12   #10
MeTeOpA
Форумчанин
 
Аватар для MeTeOpA
 
Регистрация: 17.02.2010
Сообщений: 194
По умолчанию

Такой вопрос...

В Image1 загружен tested.bmp

Пробуем :
Код:
 Image1.Canvas.Pen.Color:= clRed;
  Image1.Canvas.Pen.Width:=2;
 Image1.Canvas.Rectangle(0,0,100,100);
Получаем не красный(как ожидалось)квадрат а черный закрашенный квадрат поверх изображения....

В чем дело не подскажете?
MeTeOpA вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Рисование поверх окна gtk Bиталий Qt и кроссплатформенное программирование С/С++ 0 21.03.2011 16:57
DrawText поверх картинки Qwe1 Win Api 2 28.12.2010 21:49
Рисование картинки методом Draw Nazar1994 Общие вопросы Delphi 2 21.11.2009 01:57
Рисование поверх DirectX Bibus Помощь студентам 0 25.06.2009 20:04
текст поверх картинки Viteef HTML и CSS 3 29.06.2007 16:58