Einzelnen Beitrag anzeigen

usjr0070

Registriert seit: 5. Aug 2005
10 Beiträge
 
Delphi 7 Enterprise
 
#1

Timage Rect und Canvas Position

  Alt 4. Nov 2013, 23:38
Hallo Delphi Gemeinde,
vielleicht kann mir hierbei einer einen Tipp geben.

Folgendes Problem.

Ich lade in ein Timage (Größe 320 x 479 -- Bild1) aus Platzgründen ein Bild(Originalgröße 472 x 709-- Bild2) das dann Proportional und Center dargestellt wird.
Darüber befindet sich ein Panel, in diesem sich auch ein TImage befindet.Aus der Procedure unten schreibe ich dann mit
DrawOutlinedText einen oder mehrere Buchstaben in das Timage des Panels.Wenn nötig kann ich die Buchstaben vorher auch drehen und spiegeln.
Das klappt so weit, so gut. Wenn ich das Panel bewege oder die Größe ändere funktioniert das auch. Der oder die Buchstaben werden dann
in das untere TImage an der richtigen Position eingefügt.

Dieses TImage (Größe 320 x 479) verliert ja an Qualität und so habe ich mir gedacht,da ja das ganze auch wieder gespeichert werden soll
lege bei laden noch ein Timage(savepic 472 x 709) unsichtbar an und schreibe dann wenn die Benutzerin per DrawOutlinedText Text einfügt, auch
den Text in das Canvas des Timage Proportional an die Position ein.

Tja und ab dann habe ich das Problem, ich müsste das Rect und Mysize siehe unten
Proportional anpassen. Der erste Buchstabe siehe Bild 2 wird im Moment fast so wie im verkleinerten Timage positioniert.
Die Proportion müsste wahrscheinlich auch angepasst werden. Nur sicher bin ich nicht.

Und wenn die Panelposition verändert wird geht das schief mit
dem Positionieren... auf dem großen TImage ... siehe unten



Delphi-Quellcode:
var
  pp,r,t: TRect;
  MyFont : TFont ;
  b: TBitmap;
  h,w:integer;
  estr: string;
  tx, ty ,rx,ry, fx,fy: Integer;
  P: TPoint;
begin
  P := Point(imglevel1.Left, imglevel1.Top); // imglevel1 liegt im Panel und kann verschoben werden.

  {Button1's coordinates are expressed relative to it's parent. Using Parent.ClientToScreen converts
   these client coordinates to screen coordinates, which are absolute, not relative.}


  P := imglevel1.Parent.ClientToScreen(P);

  {Using ScreenToClient here is the same as Self.ScreenToClient. Since Self is the current instance
  of TForm1, this statement converts the absolute screen coordinates back to coordinates relative to Self.}


  P := ScreenToClient(P);

  estr:=edit1.Text; //Buchstabe der eingefügt wird
  b := TBitmap.Create;
  b.PixelFormat:=pf24bit;
  b.Width := 472;
  b.Height := 709;

  pp := imglevel1.BoundsRect;//.ClientToScreen(Point(0,0));

  r:=imglevel0.ClientRect;
  t:=savepic.ClientRect;

  tx := ((t.Right - t.Left) div 2) - (b.Canvas.TextWidth(estr) div 2) ;
  ty := ((t.Bottom - t.Top) div 2) - (b.Canvas.TextHeight(estr) div 2);

  rx := (Pp.Right - Pp.Left) div 2 ;
  ry := (Pp.Bottom - Pp.Top) div 2 ;

  fx := ((p.x + Round(rx*2.54)) * 472) div 320 ;
  fy := ((p.y + Round(ry*2.54)) * 709) div 479 ;

  // falls benötigt:
  MyFont := TFont.Create;
  try
    with MyFont do
    begin
      Name := MyFontName;//'Pirate';
      color := myColor; //'clred'
      style := style + mystyle; //nichts
      size := mysize //(mysize * 320) div 472 ; //240 px beim Start imglevel1 im savepic 162 px [COLOR="Red"][B]<---- das hier bekomme ich nicht hin[/B][/COLOR]
    end;

   //ShowMessage(Format('x: %d, y: %d, rx: %d, ry: %d, fx: %d, fy: %d, size: %d, tx: %d, ty: %d, p.x: %d, p.y: %d', [P.X, P.Y,rx,ry,fx,fy,(mysize * 320) div 472,tx,ty,p.x,p.y]));
   //showmessage(format('rx: %d, ry: %d',[ry-(rx-(p.y)+20) ,rx+(ry-(p.y)-20)]));

   DrawOutlinedText (savepic.Picture.Bitmap.Canvas, // Orginalbild
                    rect(ry-(rx-(p.y)+20) ,rx+(ry-(p.y)-20) , fx ,fy), // [COLOR="Red"][B]<---- das hier bekomme ich nicht hin[/B][/COLOR]
                    estr, // Buchstabe der ausgegeben wird-
                    myFont,//'Pirate'
                    imfill.Canvas.Brush.Color, //clred
                    imboard.Canvas.Brush.Color, // clblack
                    strtoint(edit2.text)); // Rahmenstärke Start=2

   finally
     MyFont.Free;
     b.Free;
  end;
Ich würde mich über jeden Tipp freuen.

Mfg
Jürgen
Miniaturansicht angehängter Grafiken
320_479.jpg   709_472.jpg  
  Mit Zitat antworten Zitat