Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как сделать прозрачную рамку над участком Image? 
V
    Опции темы
=Женек=
Дата 19.3.2015, 22:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 548
Регистрация: 20.2.2005

Репутация: 1
Всего: 1



господа, делаю в своем приложении что-то вроде лупы. Есть 2 объекта Image, на одном исходная картинка, на другом увеличенная.
Так вот мне нужно перемещать над исходным изображением прямоугольную рамку, чтобы задавать просматриваемый участок. Я бы мог заморочиться с отрисовкой этого прямоугольника, запоминанием и восстановлением фона. Но мне это кажется изобретательством велосипеда. 
А нельзя ли как-то это сделать более высокотехнологично? Чтобы был некий объект на форме, чтобы его можно было перемещать, ловить событие наведения и нажатия, а также перетаскивания?
Как бы вы решили такую задачу? Или может есть vcl в виде рамки м прозачнм центром?
PM MAIL   Вверх
=Женек=
Дата 19.3.2015, 22:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 548
Регистрация: 20.2.2005

Репутация: 1
Всего: 1



Я пробовал сверху кидать еще один Image и ставил в его свойствах Transparent=true. Но все рвано получал белый фон.
PM MAIL   Вверх
SVN74
Дата 21.3.2015, 00:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 740
Регистрация: 5.5.2008
Где: Комсомольск на Дн епре

Репутация: 11
Всего: 18



Нечто подобное я когда то делал, для рамки, под image клал panel, которая хорошо реагирует на все события а также хорошо производит отрисовку.
PM MAIL WWW   Вверх
=Женек=
Дата 21.3.2015, 20:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 548
Регистрация: 20.2.2005

Репутация: 1
Всего: 1



Разобрался.

ВОзник следующий вопрос

Вот отрисовка того, что под лупой
Код

for (y=0; y <=zoom_height; y++)
{
  for (x = 0; x <= zoom_width; x++)
  {
   Form1->Image2->Canvas->Brush->Color = Form1->Image1->Picture->Bitmap->Canvas->Pixels[x+Form1->Image3->Left-Form1->Image1->Left][y+Form1->Image3->Top-Form1->Image1->Top];
  Form1->Image2->Canvas->FillRect(Rect(x*SCALE,y*SCALE,x*SCALE+SCALE-1,y*SCALE+SCALE-1));
  }
}



zoom_width и zoom_height не более 80-ти.
Но отрисовка 6400 прямоугольников идет оооооооооочень медленно.

Есть способ нарисовать быстрее?

Это сообщение отредактировал(а) =Женек= - 21.3.2015, 21:01
PM MAIL   Вверх
SVN74
Дата 22.3.2015, 11:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 740
Регистрация: 5.5.2008
Где: Комсомольск на Дн епре

Репутация: 11
Всего: 18



Цитата(=Женек= @  21.3.2015,  20:40 Найти цитируемый пост)
Но отрисовка 6400 прямоугольников идет оооооооооочень медленно.
Есть способ нарисовать быстрее?

Есть. 
Копирование по пикселю будет очень медленно, поэтому  надо использовать другие методы копирования и масштабирования Bitmap целиком.

К примеру функции GDI: 
   StretchDIBits
   BitBlt

Или функции TGraphics:
   StretchDraw 
   Draw

В любом случае для скорости необходима кадровое копирование.
PM MAIL WWW   Вверх
=Женек=
Дата 22.3.2015, 15:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 548
Регистрация: 20.2.2005

Репутация: 1
Всего: 1



Что-то я не нашел вменяемых примеров...
Смотрите, мне надо с Image1 (имеющего размеры 640x480), скопировтать участок, располагающийся в координатах скажем 100,100, размерами 40х40  и  поместить его в Image2 размерами 400x400, предварительно растянув (получается в 10 раз).

Как жэто сделать?
PM MAIL   Вверх
=Женек=
Дата 22.3.2015, 19:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 548
Регистрация: 20.2.2005

Репутация: 1
Всего: 1



Внезапно...
Form1->Image2->Canvas->CopyRect  с лихвой и быстро выполняет все что нужно - и копирует и масштабирует, если размеры копируемой и заполняемой областей не совпадают...


Это сообщение отредактировал(а) =Женек= - 22.3.2015, 19:14
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++ Builder"
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по С++ Builder обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Настоятельно рекомендуем заглянуть в DRKB (Delphi Russian Knowledge Base) - крупнейший в рунете сборник материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C++ Builder | Следующая тема »


 




[ Время генерации скрипта: 0.0437 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.