Аватар для edward_jonson
163 / 163 / 68
Регистрация: 23.02.2011
Сообщений: 392

Увеличительное стекло

08.04.2012, 22:03. Показов 2816. Ответов 7
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Требуется сделать подобие увеличительного стекла. Загружаю на форму бмп картинку
C++
1
2
3
4
5
6
void __fastcall TForm1::Button1Click(TObject *Sender)
{
        Graphics::TBitmap * pctr = new Graphics::TBitmap;
        pctr->LoadFromFile(OpenPictureDialog1->FileName);
        Form1->Canvas->Draw(20, 20, pctr);
}
, и при передвижении курсора по этой картинке в TPanel надо рисовать кусок этой картинки, причём сам зум регулируется скроллбаром (1-10х), основной вопрос - какими средствами можно вырезать определённую область картинки и регулировать размеры этой области?
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
08.04.2012, 22:03
Ответы с готовыми решениями:

Наложить стекло на форму.
Как можно наложить стекло на форму и вывести какой-нибудь логотип?

Увеличительное стекло
Здравствуйте Мелькнула интересная задачка, заслуживает отдельной темы - есть окно в котором я рендерю всю сцену и есть другое...

Создать программу увеличительное стекло
Нужно чтоб был круг(стекло) управлять на WASD и чтоб в его диапазоне фигура увеличивалась

7
 Аватар для BRcr
4043 / 2333 / 292
Регистрация: 03.02.2011
Сообщений: 5,066
Записей в блоге: 10
08.04.2012, 22:26
Все это способна сделать(ну, почти) одна-единственная функция StretchDraw( TRect &, Graphics::TGaphic * ).
1
Практикантроп
 Аватар для nick42
4841 / 2726 / 534
Регистрация: 23.09.2011
Сообщений: 5,798
08.04.2012, 22:41
это пример использования функции, в которой увеличение задается__
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
void __fastcall TForm1::Image1MouseMove(TObject *Sender, TShiftState Shift, int X, int Y)
{
  ZoomIt(Image1->Picture,Image2->Picture,X,Y,8);
}
//---------------------------------------------------------------------------
void __fastcall TForm1::ZoomIt(TObject *Source,TObject *Target,
                        int X,int Y,int Zoom )
{
  int Sw,Sh,Tw,Th,Dw,Dh;
  int SX1,SX2,SY1,SY2;
  int TX1,TX2,TY1,TY2;
 
  TPicture *so = (TPicture *)Source;
  TPicture *ta = (TPicture *)Target;
 
  Sw = so->Bitmap->Width;
  Sh = so->Bitmap->Height;
  Tw = ta->Bitmap->Width;
  Th = ta->Bitmap->Height;
  Dw = Tw/2;
  Dh = Th/2;
 
  TX1 = 0;
  TX2 = Tw;
  TY1 = 0;
  TY2 = Th;
 
  SX1 = X-Dw/Zoom;
  SX2 = X+Dw/Zoom;
  SY1 = Y-Dh/Zoom;
  SY2 = Y+Dh/Zoom;
 
  if (SX1<0) {
    TX1 = TX1-(SX1*Zoom);
    SX1 = 00;
  }
  if (SX2>Sw) {
    TX2 = TX2+(Sw-SX2)*Zoom;  SX2 = Sw;
  }
  if (SY1<0) {
    TY1 = TY1-(SY1*Zoom);
    SY1 = 00;
  }
  if (SY2>Sh) {
    TY2 = TY2+(Sh-SY2)*Zoom;
    SY2 = Sh;
  }
 
  ta->Bitmap->Canvas->Brush->Color = clBlack;
  ta->Bitmap->Canvas->FillRect(Rect(0,0,Tw,Th));
  ta->Bitmap->Canvas->CopyRect(Rect(TX1,TY1,TX2,TY2),
                               so->Bitmap->Canvas,
                               Rect(SX1,SY1,SX2,SY2));
}
1
Практикантроп
 Аватар для nick42
4841 / 2726 / 534
Регистрация: 23.09.2011
Сообщений: 5,798
08.04.2012, 23:23
Зону "лупы" (Image2) надо предварительно инициализировать__
C++
1
2
3
4
5
6
7
8
9
10
      TRect RE;
 
      RE.left = 0; RE.top = 0;
      RE.right = Image2->Width ;
      RE.bottom = Image2->Height ;
      Image2->Picture->Bitmap->PixelFormat = pf24bit;
      Image2->Picture->Bitmap->Width       = Image2->Width ;
      Image2->Picture->Bitmap->Height      = Image2->Height ;
      Image2->Picture->Bitmap->Canvas->Brush->Color = clBlack;
      Image2->Picture->Bitmap->Canvas->FillRect(RE);
Миниатюры
Увеличительное стекло  
1
 Аватар для edward_jonson
163 / 163 / 68
Регистрация: 23.02.2011
Сообщений: 392
08.04.2012, 23:39  [ТС]
nick42, не могли бы вы, пожалуйста, прикрепить сюда сей проект (у вас, видимо, билдер не 6?).
И каким образом можно сделать это всё без использования компонентов TImage, а используя Canvas?
0
Практикантроп
 Аватар для nick42
4841 / 2726 / 534
Регистрация: 23.09.2011
Сообщений: 5,798
08.04.2012, 23:54
Лучший ответ Сообщение было отмечено как решение

Решение

Please
Вложения
Тип файла: rar Zoom1-10.rar (588.4 Кб, 105 просмотров)
6
1 / 1 / 0
Регистрация: 06.11.2012
Сообщений: 14
07.11.2012, 21:05
nick42, а как это зделать? Разработать графический редактор для работы с изображениями. Обеспечить возможность масштабирования входного изображения и выделения части изображения
0
Модератор
 Аватар для vxg
3409 / 2180 / 354
Регистрация: 13.01.2012
Сообщений: 8,450
08.11.2012, 13:34
недавно нужно было масштабировать без артефактов, может кому понадобится. делал при помощи свободной библиотеки FreeImage.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
    HDC hdc = GetDC(bmp->Handle);
    HBITMAP hbmp = bmp->Handle;
    FIBITMAP *dib = 0;
    BITMAP bm;
    GetObject(hbmp, sizeof(BITMAP), (LPSTR)&bm);
    dib = FreeImage_Allocate(bm.bmWidth, bm.bmHeight, bm.bmBitsPixel);
    int nColors = FreeImage_GetColorsUsed(dib);
    int Success = GetDIBits(hdc, hbmp, 0, FreeImage_GetHeight(dib),
    FreeImage_GetBits(dib), FreeImage_GetInfo(dib), DIB_RGB_COLORS);
    FreeImage_GetInfoHeader(dib)->biClrUsed = nColors;
    FreeImage_GetInfoHeader(dib)->biClrImportant = nColors;
 
    FIBITMAP *_dib = FreeImage_Rescale(dib, w, h, FILTER_BICUBIC);
 
    FreeImage_Unload(dib);
 
    bmp->Handle = CreateDIBitmap(hdc, FreeImage_GetInfoHeader(_dib),
    CBM_INIT, FreeImage_GetBits(_dib), FreeImage_GetInfo(_dib), DIB_RGB_COLORS);
 
    FreeImage_Unload(_dib);
2
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
08.11.2012, 13:34
Помогаю со студенческими работами здесь

30кГц на стекло
Доброго времени суток! думаю автомобилисты многие точно читали что хотят переложить военную отчистки стекл на авто в новосятх...

Защитное стекло
здравствуйте! какое стекло заказать для Xiaomi Redmi Note 4 Global на AliExpress.com , чтоб полностью накрыл экран и по краям не било...

Треснуло стекло
В результате падения растрескалось стекло на планшете Multipad 10.1 Ultimate 3G. Когда отключил изображение было на всем экране, пальцами...

Треснутое стекло iphone 5
Добрый день) Такой странный вопрос. Есть iphone 5 с трещиной по экрану. Вот ей богу я без понятия, это треснуто стекло или сам...

Стекло на Sony Xperia V
Проблема в том, что у меня на телефоне стояла заводская пленка. Но спустя 2 года я хотел поменять её ибо была сильно расцарапана. Начал...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Опции темы

Новые блоги и статьи
SDL3 для Web (WebAssembly): Основы отладки веб-приложений на SDL3 по USB и Wi-Fi, запущенных в браузере мобильных устройств
8Observer8 07.02.2026
Содержание блога Браузер Chrome имеет средства для отладки мобильных веб-приложений по USB. В этой пошаговой инструкции ограничимся работой с консолью. Вывод в консоль - это часть процесса. . .
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru