Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2011.05.22;
Скачать: [xml.tar.bz2];

Вниз

Рисунки   Найти похожие ветки 

 
Женя   (2011-02-12 15:43) [0]

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


 
KilkennyCat ©   (2011-02-12 16:03) [1]

bitblt


 
clickmaker ©   (2011-02-12 16:14) [2]

StretchBlt


 
KilkennyCat ©   (2011-02-12 16:17) [3]

да, точно. я почему-то подумал, что у bitblt есть флаг ресайза... ошибся.


 
Женя   (2011-02-12 16:26) [4]

спасибо
StretchBlt - работает как надо !


 
Женя   (2011-02-12 21:28) [5]

Еще вопрос - как сглаживание сделать ?


 
clickmaker ©   (2011-02-12 21:55) [6]

SetStretchBltMode HALFTONE


 
Женя   (2011-02-12 22:58) [7]


with BufIm.IDr do
begin
StretchBlt(Form11.Image2.Canvas.Handle,0,0,
Form11.Image2.Width,Form11.Image2.Height,Canvas.Handle,0,0,Width,Height,SRCCOPY) ;
end;

- все делает (и масштабирует и рисует)

- несмотря на то что
Form11.Image2.Transparent:=true;
фон не пропадает - (я рисую прямую на BufIm.IDr.Canvas белом фоне)
форма серая;


 
clickmaker ©   (2011-02-12 23:20) [8]

StretchBlt - функция win API, ей глубоко параллельно на Image2.Transparent

см. TransparentStretchBlt в Graphics.pas


 
Женя   (2011-02-13 15:05) [9]

StretchBlt - получилось, но потом, когда я перерисовываю, то картинка просто очищается и ничего не рисуется.


 
Женя   (2011-02-13 15:07) [10]

сначало юзаю StretchBlt на картинку "буфер"
затем TransparentBlt - уже куда вывожу


 
Женя   (2011-02-13 22:54) [11]

StretchBlt - что нужно делать чтобы использовать второй раз
на картинке, когда я вызываю ее второй раз ничего не появляется


 
KilkennyCat ©   (2011-02-13 23:34) [12]

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


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

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] - нет


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

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


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


> with BufIm.Im[0] do

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

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


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


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

TImage


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

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


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

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


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

ну, что-то не так... и кстати, а не стоит ли выкинуть 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 16:01) [19]

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


 
KilkennyCat ©   (2011-02-14 16:23) [20]

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


 
KilkennyCat ©   (2011-02-14 16:25) [21]

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


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

Как ?


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

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


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

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


 
KilkennyCat ©   (2011-02-14 17:08) [25]

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

> Как ?

TImage.Stretch := true;


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

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


 
KilkennyCat ©   (2011-02-14 17:59) [27]

отсутсвует.


 
johnjar ©   (2011-02-14 18:49) [28]

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


 
KilkennyCat ©   (2011-02-14 20:39) [29]

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;


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


 
KilkennyCat ©   (2011-02-14 20:44) [30]

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


 
Anatoly Podgoretsky ©   (2011-02-14 21:32) [31]

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

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



Страницы: 1 вся ветка

Форум: "Начинающим";
Текущий архив: 2011.05.22;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.51 MB
Время: 0.015 c
2-1297509771
Pavel
2011-02-12 14:22
2011.05.22
Каким образом можно узнать, что форму начали двигать?


2-1297450505
Женя
2011-02-11 21:55
2011.05.22
Ссылки(2)


15-1296566174
oxffff
2011-02-01 16:16
2011.05.22
Есть интересная задача


1-1245744723
dmitry_12_08_73
2009-06-23 12:12
2011.05.22
Как выделить нужный файл в открываемой папке?


2-1297680683
Евгений07
2011-02-14 13:51
2011.05.22
SendMessage WM_COPYDATA





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский