Registriert seit: 8. Jul 2004
Ort: Aachen
797 Beiträge
Delphi XE2 Professional
|
Re: image
2. Okt 2009, 19:55
Meinst du so etwas:
http://www.delphipraxis.net/internal...t.php?t=137198
In meinem ersten Posting gibt es einen Sourcecode für das Coverflow mit GR32. Da kannst du die Funktion PaintCover verwenden, um ein Bild perspektivisch zu zeichnen!
//edit: Die hier meine ich:
Delphi-Quellcode:
procedure PaintCover(DestBitmap:TBitmap32;x,y,width,height:integer;perspectiv:single;angle:integer;picture:TBitmap32);
var lo,lu,ro,ru:TPoint;
mo,mu:extended;
i,j:integer;
dummy:integer;
begin
//vier Eckpunkte des Covers berechnen:
lo.x:=x;
lo.Y:=y;
lu.X:=x;
lu.Y:=y+height;
ru.x:=round(lu.x+width*cos(abs(angle)/360*2*Pi));
ru.y:=round(lu.y-perspectiv*height/2*sin(abs(angle)/360*2*Pi));
ro.X:=ru.x;
ro.Y:=round(ru.y-height+perspectiv*height*sin(abs(angle)/360*2*Pi));
if angle<0 then
begin
dummy:=ro.y;
ro.y:=lo.y;
lo.y:=dummy;
dummy:=ru.y;
ru.y:=lu.y;
lu.y:=dummy;
dummy:=(width-(ro.x-lo.x));
lo.x:=lo.x+dummy;
lu.x:=lu.X+dummy;
ro.x:=ro.X+dummy;
ru.x:=ru.x+dummy;
end;
//Steigung der oberen und unteren Kante berechnen:
mo:=-(ro.Y-lo.Y)/(ro.x-lo.X);
mu:=-(ru.Y-lu.Y)/(ru.x-lu.x);
//bild zeichnen:
DestBitmap.BeginUpdate;
DestBitmap.Clear(clblack);
for i:=0 to (ro.X-lo.x) do
for j:=round(-i*mo) to round((lu.Y-lo.y)+i*mo) do
DestBitmap.Pixel[lo.X+i,lo.Y+j]:=round(picture.Pixels[round(picture.Width/(ro.x-lo.X)*i),round(picture.Height/((lu.Y-lo.y)+2*i*mo)*(j+i*mo))]);
//Rechteck zeichnen:
with DestBitmap do
begin
pencolor:=clsilver;
moveto(lo.x,lo.y);
linetos(lu.x,lu.y);
linetos(ru.x,ru.y);
linetos(ro.x,ro.y);
linetos(lo.x,lo.y);
end;
DestBitmap.EndUpdate;
end;
„Software wird schneller langsamer als Hardware schneller wird. “ (Niklaus Wirth, 1995)
Mein Netzwerktool: Lan.FS
|
|
Zitat
|