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();
|
подскажи плиз, а то поглядел в форуме — чтото нашел — но не подходит ( |
|
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();
|
и вылазит обрезанная копия оригинала (
уже не первый день бьюсь (( |
|
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);
Попробуй может получится. (Удачи) |
|