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?