Вниз
Скачать: CL | DM;

Алгоритм - аналог stretchdraw   Найти похожие ветки 

← →
illusdolphin   (2003-04-07 23:13) [0]

Не подскажите хороший алгоритм для позиционирования картинки размера 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) [1]

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



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

Скачать: CL | DM;



Память: 0.45 MB
Время: 0.026 c
1-100826
Goga
2003-07-17 18:09
2003.07.31
Привязка события к компоненту созданного в runtime


3-100635
paxer
2003-07-10 14:44
2003.07.31
А что, в Yaffil убран тип Date?


4-101040
Avers
2003-05-29 15:58
2003.07.31
Выбор папок из текущего каталога


6-100849
Beregin
2003-05-25 16:13
2003.07.31
Переслать файл без TfileStream


3-100589
ser_ega
2003-07-08 23:27
2003.07.31
Query




   Наверх