-1 / 5 / 2
Регистрация: 13.03.2013
Сообщений: 203
1

TImage и Слайдшоу

11.02.2020, 23:07. Показов 521. Ответов 3
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Сделал скринсейвер, но не могу загрузить туда картинку в исходном размере. Ее то растягивает во весь экран, то она уходит за границы экрана. А надо что бы она была отмасштабирована по центру. Как просмоторщиком изображений открывается.

Как разместить ее отмасштабированной по центру TImage, которая размером с весь экран пользователя? (пропорционально масштабируем пока не упремся в края экрана).
Варианты только вычислять размеры TImage, и грузить картинку в TImage уже по размерам как мне надо?

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
    HDC hdc = GetDC(0);
    Top = 0;
    Left = 0;
    Width = GetDeviceCaps(hdc, HORZRES);
    Height = GetDeviceCaps(hdc, VERTRES);
 
    Image1->Picture->Bitmap->Width = Width;  //этими параметрами тоже пробовал играть. Вообще пропадает картинка
    Image1->Picture->Bitmap->Height = Height;
 
    Image1->Stretch = true; //с параметром false картинка в оригинальном размере, но улетает за пределы экрана
    TJPEGImage *jpg = new TJPEGImage;
jpg->LoadFromFile(ListBoxFiles->Items->Strings[i]+".jpg");
Image1->Picture->Bitmap->Canvas->StretchDraw(Image1->ClientRect, jpg);  //масштабируется во весь экран!
//Image1->Picture->LoadFromFile(ListBoxFiles->Items->Strings[i]+".jpg"); 
 
Show();
ReleaseDC(0, hdc);
Application->Restore();
SetForegroundWindow(Handle);
Добавлено через 9 минут
P/S: Не прошу писать за меня, можно просто намекнуть куда смотреть.

Добавлено через 14 минут
Я так понял вот тут надо думать как разместить?
C++
1
2
Image1->Picture->Bitmap->Width = Width;
        Image1->Picture->Bitmap->Height = Height;
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
11.02.2020, 23:07
Ответы с готовыми решениями:

Как по нажатию мыши менять TImage и перерисовывать на него bmp с другого TImage?
Есть два TImage. На Image1 картинка TBitmap, Image1 растянут на всю форму. При нажатии на Image1 и...

Мерцание компонента Timage и перемещение Timage при нажатии
Здравствуйте! Помогите убрать мерцание компонента Timage при изменении размера. Нашел в...

Could not find a match for 'TImage::TImage()'
Решил поработать с классами. Ну и заодно разобраться с firemonkey. Сразу же нарвался на такую...

СлайдШоу
Доброго времени суток. Как реализовать последовательную смену фотографий, которые были выбраны (...

3
случайный прохожий
2919 / 1936 / 606
Регистрация: 20.07.2013
Сообщений: 5,132
12.02.2020, 01:02 2
У Image отключи Stretch (выставь значение в false), а Center и Proportional сделай равным true.
0
-1 / 5 / 2
Регистрация: 13.03.2013
Сообщений: 203
12.02.2020, 12:32  [ТС] 3
gunslinger, пробовал так, не получилось, - попробую снова - может упустил что-то . У Timage стоит свойство AutoSize - true;

Добавлено через 9 минут
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
if(i>ListBoxFiles->Items->Count-1)
     {i=0;}
 
    HDC hdc = GetDC(0);
    Top = 0;
    Left = 0;
    Width = GetDeviceCaps(hdc, HORZRES);
    Height = GetDeviceCaps(hdc, VERTRES);
 
 
    Image1->Picture->Bitmap->Width = Width;
    Image1->Picture->Bitmap->Height = Height;
 
        Image1->Stretch = false;
        Image1->Proportional=true;
        Image1->Center=true;
 
    TJPEGImage *jpg = new TJPEGImage;
 
 
 
 
jpg->LoadFromFile(ListBoxFiles->Items->Strings[i]+".jpg");
Image1->Picture->Bitmap->Canvas->StretchDraw(Image1->ClientRect, jpg); //растягивает на весь экран
//Image1->Picture->LoadFromFile(ListBoxFiles->Items->Strings[i]+".jpg");  /грузит не в центре и вылазит за границы экрана(
 
 
 
i++;
Добавлено через 4 часа 33 минуты
Возможно проблема в установленном свойстве Autosize - и надо поставить его в false . А Image1 - alClient. А Form1 - размером с экран. Тогда имейдж растянется на весь экран, изображение загрузиться по центру и отмачштабированно с сохранением пропорций?))) Верно?
0
-1 / 5 / 2
Регистрация: 13.03.2013
Сообщений: 203
12.02.2020, 23:21  [ТС] 4
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
if(i>ListBoxFiles->Items->Count-1)
     {i=0;}
 
 
 
    HDC hdc = GetDC(0);
 
    Top = 0;
    Left = 0;
    Width = GetDeviceCaps(hdc, HORZRES);
    Height = GetDeviceCaps(hdc, VERTRES);
 
 
 
        Image1->Picture->Bitmap->Width = Width;
        Image1->Picture->Bitmap->Height = Height;
 
        Image1->Stretch = true;
        Image1->Proportional=true;
        Image1->Center=true;
 
    TJPEGImage *jpg = new TJPEGImage;
 
Image1->Picture->LoadFromFile(ListBoxFiles->Items->Strings[i]+".jpg");
 
 
 
i++;
Решено) Всем спасибо

Добавлено через 27 минут
Свойство Autosize должно быть установлено в false.
0
12.02.2020, 23:21
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
12.02.2020, 23:21
Помогаю со студенческими работами здесь

Слайдшоу
Ребят кто разбирается во флеше, мне надо сделать слайдшоу во флеше кому не трудно направте в нужном...

Слайдшоу
Здравствуйте, подскажите как можно сделать подобное слайдшоу http://thewaltdisneycompany.com/ чтобы...

слайдшоу
помогите как встаить слайдшоу на сайт чтобы фотки сами менялись через каждые 5 сек

Слайдшоу на сайт
Всем здравствуйте! Возможно пишу в несоответствующую ветку форума, но все же задам вопрос. На каком...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru