Форум: "Начинающим";
Текущий архив: 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