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

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

Алгоритм - аналог stretchdraw [D5, D6, D7, NT4, Win2k, WinXP]


illusdolphin ©   (2003-04-07 23:13:00) 

Не подскажите хороший алгоритм для позиционирования картинки размера X:Y в X1:Y1 по аналогии stretchdraw, но при этом сглаживающий неровности, как, кто сталкивался, это делается во многих местах XP, как, например, на desktop"е. Я пробовал делать сам, получилось не совсем... Кто знает, помогите?

(пример)

function stretchcool(width,height : integer; bitmap:tbitmap) : tbitmap;
var i,j,h,k,p,w:integer; p2,p1: pargb;
col,r,g,b,dobx,doby,t1,t2 : integer;
begin
bitmap.PixelFormat:=pf24bit;
result:=Tbitmap.create;
result.PixelFormat:=pf24bit;
result.Width:=width;
result.Height:=height;
if bitmap.Width>=width then dobx:=-1 else dobx:=0;
if bitmap.Height>=Height then doby:=-1 else doby:=0;
for i:=0 to height-1 do
begin
p1:=result.ScanLine[i];
for j:=0 to width-1 do
begin
col:=0;
r:=0;
g:=0;
b:=0;
if doby<>0 then t1:=round((bitmap.height /height)*(i+1))+doby else t1:=floor((bitmap.height /height)*(i+1));
for k:=round((bitmap.height/height)*(i)) to t1{floor((bitmap.height /height)*(i+1))} do
begin
if k<bitmap.height then
p2:=bitmap.ScanLine[k];
if dobx<>0 then t2:=round((bitmap.Width /Width)*(j+1))+doby else t2:=floor((bitmap.Width /Width)*(j+1));
for p:=round((bitmap.Width/Width)*(j)) to t2{floor((bitmap.Width /Width)*(j+1))+dobx} do
begin
if p<bitmap.width then
begin
inc(col);
inc(r,(p2[p].r));
inc(g,p2[p].g);
inc(b,p2[p].b);
end;
end;
end;
if col<>0 then
begin
p1[j].r:=round((r/col));
p1[j].g:=round((g/col));
p1[j].b:=round((b/col));
end;
end;
end;
end;


Плохой человек   (2003-04-07 23:40:00) [1]

Ну и? Воспользуйся каким-либо фильтром из какой-либо графической библиотеки - из Graphic32 или из FastLib. Растягивание со сглаживанием - не совсем верный для этого термин. Ты, очевидно, имеешь ввиду resampling (как альтернатива resize). Для resampling есть куча фильтров. Можно было бы алгоритм здесь привести, но выдирать его из библиотек я не буду.


Наверх

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