Einzelnen Beitrag anzeigen

Fukiszo
(Gast)

n/a Beiträge
 
#20

AW: grafischer Scroll Text (StarWars o.ä.)

  Alt 25. Jan 2018, 07:26
nach etlichen selbstversuchen mich in die materie einzuarbeiten bin ich bei sowas hier gelandet.

vielleicht mag es ja jemand noch weiter verfeinern.
ist total unoptimiert und bestimmt fehlerbehaftet bis zum anschlag
cpu wird böse ausgelastet.

Delphi-Quellcode:
procedure StarWarsTrapez;
var
  xc,yc:Integer;
  orgCoord:TPoint;
  newTopEdge:Integer;
  startX,stopX:Real;
  mLeftSide:Real;
  screenZ,screenTopY:Integer;
  textY:Integer;
  mg1,mg2:Real;
  p1,r1,r2:TPoint;
  param:Real;
begin
  textY:=-30;
  mg1:=textY/(orgImg.Width/2+OrgImg.Height);
  mg2:=textY/(orgImg.Width/2);
  screenZ:=Round(newImg.Height/(mg1-mg2));
  screenTopY:=Round(mg1*screenZ);
  newTopEdge:=Round(newImg.Width*orgImg.Width/(orgImg.width/2+orgImg.Height)/2);
  mLeftSide:=(newTopEdge-newImg.Width)/2/newImg.Height;
  startX:=(newImg.Width-newTopEdge)/2;
  stopX:=newImg.Width-startX;
  p1.x:=orgImg.width div 2;
  p1.y:=textY;
  r1.x:=OrgImg.Height;
  r1.y:=0;
  r2.x:=screenZ;
  for yc:=1 to newimg.height do begin
    startX:=startX+mLeftSide;
    stopX:=stopX-mLeftSide;
    r2.y:=screenTopY-yc;
    param:=(p1.y*r2.x-p1.x*r2.y)/(r1.x*r2.y-r1.y*r2.x);
    OrgCoord.Y:=OrgImg.Height-Round(OrgImg.Height*param);
    for xc:=Round(startX) to Round(stopX) do begin
      orgCoord.x:=Round((xc-startX)/(stopx-startx)*orgImg.width);
      newImg.canvas.pixels[xc,yc]:=orgImg.canvas.pixels[orgCoord.x,orgCoord.y];
    end;
  end;
end;
momentan wird bildA zu bildB mit einem trapez effekt umgewandelt.
wie ich das mit laufschrift hinbekommen soll weiß ich noch nicht, aber ich geb nicht auf

Grüße
  Mit Zitat antworten Zitat