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

 
Масштабирование картинок
Max
Отправлено: 31.01.2004, 11:53


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







Доброго времени суток
у меня такая проблема:
есть ряд рисунков 100х100 пихелов, запихиваю их в ImageList 100х100 размеров — все ок,
если же засовывать их в ImageList 50х50 — то они не масштабируются а просто кропятся (обрезаются — остается лишь верхняя — левая часть)
подскажите как можно растянуть/сжать картинку в программе ?
загружаю картинки в лист через:
CODE

Zoom = 50;
ImageList1->Height = Zoom;
ImageList1->Width = Zoom;
Graphics::TBitmap *pBitmap = new Graphics::TBitmap();
pBitmap->LoadFromFile("pic1.bmp");
ImageList1->Add(pBitmap,NULL);
pBitmap->Free();

подскажи плиз, а то поглядел в форуме — чтото нашел — но не подходит sad.gif(
Max
Отправлено: 02.02.2004, 08:25


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







неужели никто не сталкивался с таким ?
подскажите плиз
Asher
Отправлено: 02.02.2004, 09:31


Мастер участка

Группа: Модератор
Сообщений: 550



Попробуй вначале загружать картинку в Image размером 50х50, у которого Stretch = true; а потом из него копируй битмап
Max
  Отправлено: 02.02.2004, 12:36


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







Пробовал и так делать — в Image с Stretch = true; все отлично грузится — даже сжимается правильно,

засовываю в лист:
CODE

Image1->Picture->Bitmap->Width = 50;
Image1->Picture->Bitmap->Height = 50;
ImageList1->Width = 50;
ImageList1->Height = 50;
Image1->Picture->LoadFromFile("graf.bmp");
ImageList2->Add(Image1->Picture->Bitmap, NULL);

потом рисую на Image:
CODE

ImageList2->Draw(MapImage->Canvas,40,40,0,true);
MapImage->Refresh();

и вылазит обрезанная копия оригинала sad.gif(

уже не первый день бьюсь sad.gif((
seg_r
Отправлено: 02.02.2004, 13:05


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

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



ручками масштабируй и делай че хочешь...
Max
Отправлено: 02.02.2004, 13:49


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







QUOTE (seg_r @ 02/02/2004, 14:07)
ручками масштабируй и делай че хочешь...

ты видимо очень умный ... может скажешь че такое "ручками" ?? или я по твоему лопатой их масштабирую ??
Max
Отправлено: 02.02.2004, 14:17


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







в опщем на сколько я понял ImagaList хранит ТОЛЬКО оригиналы картинок — и тут есть 2 выхода — или их хранить в чем то другом — или масштабировать непосредственно перед отрисовкой ...
если я ошибаюсь — поправте плиз ...
Asher
Отправлено: 03.02.2004, 10:39


Мастер участка

Группа: Модератор
Сообщений: 550



Решение в лоб:
Делаешь Image с Stretch = true;
Делаешь Image1->Picture->LoadFromFile
Делаешь свой Graphics::TBitmap *pBitmap = new Graphics::TBitmap();
В него копируешь через pBitmap->Canvas->CopyRect(DstRect, Image->Canvas, SrsRect)
Делаешь ImageList1->Add(pBitmap,NULL);
Max
Отправлено: 03.02.2004, 12:03


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







-> Asher
это я уже делал ...
масштабируется ... да — но КАК !!! картинка вообще порнографическая получается ... по всей картинке получаются черные точки ...
еще варинаты будут ??
Al2sm
Отправлено: 06.02.2004, 10:57


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







Max!
У меня была подобная проблема.
Я засовывал в ImageList картинки 48x48, а в процессе работы проги надо было их масштабировать при выводе.
Решил проблему использованием функции: void __fastcall StretchDraw(const TRect &Rect, TGraphic* Graphic);
Попробуй может получится. (Удачи) smile.gif

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