Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Рисунки


Страницы:   1 2

Женя ©   (2011-02-12 15:43:00) 

Есть ли какая-нибудь функция/библиотека позволяющая масштабировать картики (уменьшать/увеличивать, при этом не обрезая)


Anatoly Podgoretsky   (2011-02-14 21:32:00) [1]

> KilkennyCat  (14.02.2011 20:39:29)  [29]

Обычно спрашивают почему не работает


KilkennyCat   (2011-02-14 20:44:00) [2]

н-да... старею. утечки допускаю.


KilkennyCat   (2011-02-14 20:39:00) [3]

var
 bmp : TBitmap;
begin
 bmp := TBitmap.Create;
 bmp.Width := 100;
 bmp.Height := 100;
 bmp.PixelFormat := pf24bit;
  img1.Picture.Graphic := bmp;
 bmp.canvas.Pen.Color := clRed;
 bmp.Canvas.Brush.Color := clWhite;
 bmp.Canvas.FillRect(bmp.Canvas.ClipRect);
 bmp.Canvas.MoveTo(0,0);
 bmp.Canvas.LineTo(100, 100);
 TransparentBlt(img1.Picture.Bitmap.Canvas.Handle, 0, 0, 50, 100, bmp.Canvas.Handle, 0, 0, 100, 100, SRCCOPY);
end;


почему этот код работает, и почему я одну строчку выделил - думайте сами или читайте все-таки справку.


johnjar   (2011-02-14 18:49:00) [4]

Image.Picture.Bitmap.Canvas.Handle -  то картики вообще нет


KilkennyCat   (2011-02-14 17:59:00) [5]

отсутсвует.


Женя   (2011-02-14 17:54:00) [6]

а сглаживание в данном случае ?


KilkennyCat   (2011-02-14 17:08:00) [7]

Image.Picture.Bitmap.Canvas
Почитай также про Image.Picture.Graphic

> Как ?

TImage.Stretch := true;


Женя   (2011-02-14 16:46:00) [8]

А если не канву Image, то что ? Просто BitMap ?


Женя   (2011-02-14 16:45:00) [9]

Пример , если можно. Заранее спасибо .


Женя   (2011-02-14 16:44:00) [10]

Как ?


KilkennyCat   (2011-02-14 16:25:00) [11]

И кстати, TImage умеет стретчить сам.


KilkennyCat   (2011-02-14 16:23:00) [12]

стоп. а с какого перепугу ты юзаешь канву имаджа? TImage - контейнер для Picture.


Женя   (2011-02-14 16:01:00) [13]

Если выкидываю StretchBlt (пааметры у TransparentBlt соответственно измеяю), тов ообще ничего не рисует.


KilkennyCat   (2011-02-14 15:49:00) [14]

ну, что-то не так... и кстати, а не стоит ли выкинуть StretchBlt?
TransparentBlt умеет стретчить.

If the source and destination rectangles are not the same size, the source bitmap is stretched to match the destination rectangle. When the SetStretchBltMode function is used, the iStretchMode modes of BLACKONWHITE and WHITEONBLACK are converted to COLORONCOLOR for the TransparentBlt function.

The destination device context specifies the transformation type for the destination coordinates. The source device context specifies the transformation type for the source coordinates.

TransparentBlt does not mirror a bitmap if either the width or height, of either the source or destination, is negative.


Женя   (2011-02-14 15:30:00) [15]

Еще попробывал пересоздовать MiniGr[2] перед обновлением картинки -
картинки стали накладываться одна на другую. Может надо только канву как то обновлять (Refresh и Repaint не работают)?


Женя   (2011-02-14 15:24:00) [16]


> И какого типа используемые объекты?

TImage


> зачем для невидимок TImage? если это временная фигня, использую
> TBitMap.Не стоит насиловать лишний раз TImage

Спасибо - последовал твоему совету
но  на MiniGr[2] - картинка все равно не меняется ( меняется только после перезапуска программы )


KilkennyCat   (2011-02-14 13:00:00) [17]


> with BufIm.Im[0] do

это зачем?
> BufIm.Im[0]
> BufIm.Im[1] - неведимки. Когда делал им Visible=true то
> заметил что

зачем для невидимок TImage? если это временная фигня, использую TBitMap.
Не стоит насиловать лишний раз TImage


icWasya   (2011-02-14 12:19:00) [18]

И какого типа используемые объекты?
MiniGr[i]
BufIm.Im[i]
BufIm.Im[i].Img


Женя   (2011-02-14 10:15:00) [19]

with BufIm.Im[0] do
begin
 MiniGr[2].Height:=Height div 3;
 MiniGr[2].Width:=Width div 3;
 BufIm.Im[1].Img.Width:=Height div 3;
 BufIm.Im[1].Img.Width:=Width div 3;
 SetStretchBltMode(BufIm.Im[1].Img.Canvas.Handle,HALFTONE);

 StretchBlt( BufIm.Im[1].Img.Canvas.Handle,0,0,
 MiniGr[2].Width,MiniGr[2].Height,Canvas.Handle,
 0,0,Width,Height,SRCCOPY);

 TransparentBlt(MiniGr[2].Canvas.Handle,0,0,
 MiniGr[2].Width,MiniGr[2].Height,
 BufIm.Im[1].Img.Canvas.Handle,
 0,0,Width div 3,Height div 3,SRCCOPY);
end;


работает только первый раз) потом не изменяется.

ели приписать до этого
Canvas.Rectangle(-5,-5,MiniGr[2].Width+5,
 MiniGr[2].Height+5);

то опять же первый раз все нормально, потом белый экран
BufIm.Im[0]
BufIm.Im[1] - неведимки. Когда делал им Visible=true то заметил что
на них картинка меняется, а на MiniGr[2] - нет


KilkennyCat   (2011-02-13 23:34:00) [20]

код покажи.
и что значит "ничего не появляется"? нет изменений?


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо