Auweh, und ich war noch froh, dass das Ding funktioniert hat.
Danke für die ausführliche Antwort.
Aber Du hast natürlich Recht, das war ein Gefrickel. Irgendwie bin ich immer dabei hängen geblieben, direkt auf die PaintBox zu zeichnen. Ich hab die Zeichenroutinen auf die TBitmap umgelenkt und siehe da, es klappt auch. Komisch, ich hab das immer vermieden, weil ich dachte, das würde mit den
GDI+ Aufrufen nicht klappen. Geht aber anstandslos.
Fehlt noch das Kopieren der TBitmap in die TPaintBox. Das hier ist im OnPaint der PaintBox, das angezeigt Bild stimmt aber noch nicht (es ist verzerrt, offenbar wird die gesamte (große) Bitmap in den sichtbaren Bereich der PaintBox geschrieben. Und weil die Bitmap größer ist als der sichtbare Bereich der PaintBox kommt dabei ein Holler heraus.
Delphi-Quellcode:
ClipRect := Rect(0,0,DestinationB.Width,DestinationB.Height);
DestinationPB.Canvas.CopyRect(DestinationPB.Canvas.ClipRect, DestinationB.Canvas, DestinationB.Canvas.ClipRect);
DestinationB ist eine TBitMap
DestinationPB ist eine TPaintBox.
Die Größen der beiden sind gleich, aber irgendwas stimmt noch nicht ganz (oder, wahrscheinlicher: ich hab irgendwas noch nicht verstanden)
Falls jemand später über diesen Thread stolpert, stelle ich hier noch eine (hoffentlich) korrekt(ere) Lösung rein (wieder aus der
DP selber):
Delphi-Quellcode:
procedure SaveBitmapAsJPG(Sender: TObject);
var
jpg: TJpegImage;
begin
with dlg_save do
begin
DefaultExt := '*.jpg';
Filter := 'Jpg (*.jpg) | *.jpg';
if Execute then
begin
jpg := TJpegImage.Create;
Try
jpg.Assign(myBitmap);
jpg.SaveToFile(ChangeFileExt(dlg_save.FileName, '.jpg'));
Finally
jpg.Free;
end;
end;
end;
end;