Einzelnen Beitrag anzeigen

nikosophi

Registriert seit: 8. Mai 2013
Ort: Weilerswist
45 Beiträge
 
Delphi 11 Alexandria
 
#3

AW: FMX: Image->Bitmap wird abgeschnitten

  Alt 3. Okt 2016, 10:24
Danke Harry!

Hab ich jetzt verstanden. Aber wohl doch nicht ganz.

Das Zeichnen eines Rahmens und einer Diagonale sollte doch dann auch in dem Bitmap Ausmassen erfolgen, oder?
Ich habe die Ausmasse des Image der Einfachheit halber im Create auf die der geladenen Bitmap gesetzt.

Delphi-Quellcode:
procedure TForm5.FormCreate(Sender: TObject);
begin
  // Das Original Bild in der Original Größe laden und darstellen
  Image1.align := TAlignLayout.None;
  Image1.wrapmode := TImageWrapMode.Original;
  Image1.Bitmap.LoadFromFile('c:\temp\bildOriginal.png');
  Image1.width := Image1.bitmap.width;
  Image1.height := Image1.bitmap.height;
end;

procedure TForm5.Button1Click(Sender: TObject);
var
  MyBitmap: TBitmap;
  rectFrame: TRectF;
  pkt1, pkt2: TPointF;
begin
  MyBitmap := TBitmap.Create(round(image1.bitmap.Width), round(image1.bitmap.height));

  pkt1 := PointF(10.0, 10.0);
  pkt2 := PointF(Image1.bitmap.width-20 , image1.bitmap.height-20);

  // Die Bitmap des Original Bildes in ein Bitmap übernehmen
  MyBitmap.Assign(Image1.Bitmap);
  // und Rahmen und Diagonale drübermalen
  if MyBitmap.Canvas.BeginScene then begin
    MyBitmap.Canvas.Stroke.Kind := TBrushKind.Solid;
    MyBitmap.Canvas.Stroke.Color := TAlphaColorRec.Coral;
    MyBitmap.Canvas.StrokeThickness := 4;
    rectFrame.TopLeft := pkt1;
    rectFrame.BottomRight := pkt2;
    MyBitmap.Canvas.DrawRect(RectFrame, 20, 20, AllCorners, 1.0);
    MyBitmap.Canvas.DrawLine(pkt1,pkt2, 1.0);
    MyBitmap.Canvas.EndScene;
  end;
  // Ergebnis speichern
  MyBitmap.SaveToFile('c:\temp\BildErgebnis.png');
      mmo.lines.add('Image1.bitmap.width: '+ FloatToStr(Image1.bitmap.width));
      mmo.lines.add('Image1.bitmap.Height: '+ FloatToStr(Image1.bitmap.height));
      mmo.lines.add('MyBitmap.width: '+ IntToStr(MyBitmap.width));
      mmo.lines.add('MyBitmap.Height: '+ IntToStr(MyBitmap.height));
      mmo.lines.add('MyBitmap.canvas.width: '+ IntToStr(MyBitmap.canvas.width));
      mmo.lines.add('MyBitmap.canvas.Height:'+ IntToStr(MyBitmap.canvas.height));
  MyBitmap.Free;

end;
Delphi-Quellcode:
Image1.bitmap.width: 1000
Image1.bitmap.Height: 667
MyBitmap.width: 1000
MyBitmap.Height: 667
MyBitmap.canvas.width: 1000
MyBitmap.canvas.Height:667
Also die Höhe und breite scheint ja jetzt zu passen, aber das Zeichnen DrawRect und DrawLine scheinen noch einen anderen Masstab zu haben.

In den angehängten Bildern sieht man in grün den Originalrahmen, mit Paint gezeichnet.
Im Ergebnis ist der orange Rahmen ( aus DrawRect ) zu groß.

Müssen da noch irgendewelche Pixelformate oder Skalierungen angepasst werden?
Miniaturansicht angehängter Grafiken
bildoriginal.png   bildergebnis.png  
  Mit Zitat antworten Zitat