C++ Builder
| Главная | Уроки | Статьи | FAQ | Форум | Downloads | Литература | Ссылки | RXLib | Диски |

 
Как сохранить пропорции..., загрузка jpeg из потока
colotoon
Отправлено: 10.06.2006, 15:23


Ученик-кочегар

Группа: Участник
Сообщений: 22



Всем привет!

Такой трабл:

С помощью TJPEGImage загружаю из ресурсов картинки и вывожу через canvas на TImage(авторазмер на всю форму)

Image1->Canvas->StretchDraw

Горизонтальные картинки отображаются нормально но вот вертикальные.. sad.gif

Блин, а вот когда зрузишь bitmap из ресурсов — все нормально (TImage: Stretch, Proportional)

из TJPEGImage я могу получить размер загруженной картинки, но вот как его использовать ума не приложу
** Валерий
  Отправлено: 14.06.2006, 18:14


Не зарегистрирован







wink.gif А как jpeg из ресурса в image загрузить?
** colotoon
Отправлено: 21.06.2006, 12:14


Не зарегистрирован







примерно так:

1. в .rc файле пишешь:
Kartinka RCDATA "1.jpg"

2. Потом создаешь переменную типа TJPEG и загружаешь в нее данные из ресурса.

3. Рисуешь содержимое переменной в TImage с помошью Canvas->Draw или Canvas->StretchDraw
** Валерий
Отправлено: 22.06.2006, 08:21


Не зарегистрирован







wink.gif Я спрашивал как в jpeg из ресурса загрузить картинку или можно в поток.
Gal
Отправлено: 23.06.2006, 10:18


Станционный диспетчер

Группа: Участник
Сообщений: 124



QUOTE

Я спрашивал как в jpeg из ресурса загрузить картинку или можно в поток.


получи из ресурса картинку в bitmap, затем
CODE

std::auto_ptr<TJPEGImage> Jpeg(new TJPEGImage());
Jpeg->Assign(bitmap);

не забудь
CODE

#include <jpeg.hpp>


Отредактировано Gal — 23/06/2006, 10:20
ShibaOn
Отправлено: 01.07.2006, 08:42


Дежурный стрелочник

Группа: Участник
Сообщений: 37



Я решал подобную проблему на MFC, мне требовалось выводить пропорционально отскэйленное изображение на статик, переписывать поленюсь smile.gif

Вот, надеюсь поможет:

CODE

 CRect disrect = dis->rcItem;
int srcWidth = FImage->GetWidth();
int srcHeight = FImage->GetHeight();
float Relation1 = (float)disrect.Width()/disrect.Height();
float Relation2 = (float)srcWidth/srcHeight;
float WScale = (float)disrect.Width()/srcWidth;
float HScale = (float)disrect.Height()/srcHeight;

if (Relation2 >= Relation1) {
 disrect.SetRect(0, 0, dis->rcItem.right, int(srcHeight*WScale));
 disrect.OffsetRect(0, (dis->rcItem.bottom — dis->rcItem.top — disrect.Height())/2);
} else  {
   disrect.SetRect(0, 0, int(srcWidth*HScale), dis->rcItem.bottom);
   disrect.OffsetRect((dis->rcItem.right — dis->rcItem.left — disrect.Width())/2, 0);
}
. . .


в disrect теперь храниться целевой ректангл, в него все и рисуешь

Отредактировано ShibaOn — 01/07/2006, 08:44

Вернуться в Вопросы программирования в C++Builder