![]() |
AW: Suche Konzept: Bild mit unbekannter Größe
Ja, das hat alles bis jetzt nicht wirklich geholfen. Ich meine funktionieren würde die eine Variante ja, gefallen tut sie mir aber nicht. Gibt es wirklich keine Möglichkeit auf ein größeres Medium zu zeichnen und dann die Größe zu verändern? Wir eine TBitmap beim resizen geleert? Wenn nicht kann ich ja einfach ne 1000x1000 px große Bitmap erzeugen und am Ende verkleinern
|
AW: Suche Konzept: Bild mit unbekannter Größe
Ich verstehe Dich nicht so ganz, aber man könnte es so, wie Bjoerk es gemeint hat, machen. Man muß das, was Du da reinzeichnest, zu irgendwas relativ setzen. In der Schule was das -glaub ich- "Verhältnisrechnung".
Man kann natürlich auch das Bitmap skalieren, das ist aber nicht so einfach, wie man denkt. Dazu benötigst Du auch eine Engine. Graphics32 hat ein TImage, das skalieren kann. Ansonsten mußt Du Dein Problem näher beschreiben. Gute Nacht! |
AW: Suche Konzept: Bild mit unbekannter Größe
Bei einem Bitmap, muss man vorher auch die Größe angeben, sonst habe ich zwar auf dem Canvas gemalt, aber in der Bitmap steht nichts drin.
Somit hat man also mit dem Bitmap nichts gewonnen. Ein simple Alternative besteht (wie schon gesagt) die Zeichenroutinen ein zusammenzustellen, dabei stellt man eben auch die tatsächliche Größe fest und dann wird das Zeil auf diese Größe eingestellt und die Zeichenroutinen angewendet. Hier ein ganz billiges Beispiel:
Delphi-Quellcode:
Ein kleiner Hinweis sei noch gegeben:
unit Form.MainForm;
interface uses Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics, Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls, Vcl.ExtCtrls; type TForm1 = class( TForm ) Button1: TButton; Button2: TButton; PaintBox1: TPaintBox; ScrollBox1: TScrollBox; Panel1: TPanel; procedure Button1Click( Sender: TObject ); procedure Button2Click( Sender: TObject ); procedure PaintBox1Paint( Sender: TObject ); private FPaintBoxProc: TProc<TCanvas>; procedure SetPaintBoxProc( const Value: TProc<TCanvas> ); public end; var Form1: TForm1; implementation {$R *.dfm} procedure TForm1.Button1Click( Sender: TObject ); var LProc: TProc<TCanvas>; begin // Zeichenroutine zusammenstellen LProc := procedure( Canvas: TCanvas ) begin Canvas.Brush.Color := clRed; Canvas.Ellipse( 100, 100, 400, 400 ); Canvas.Brush.Color := clBlue; Canvas.Rectangle( 350, 400, 800, 700 ); end; // PaintBox Größe setzen PaintBox1.Width := 800; PaintBox1.Height := 700; // Zeichenroutine für die PaintBox setzen SetPaintBoxProc( LProc ); end; procedure TForm1.Button2Click( Sender: TObject ); begin SetPaintBoxProc( nil ); end; procedure TForm1.PaintBox1Paint( Sender: TObject ); begin // Hier wird die Zeichenroutine einfach ausgeführt if Assigned( FPaintBoxProc ) then FPaintBoxProc( ( Sender as TPaintBox ).Canvas ); end; procedure TForm1.SetPaintBoxProc( const Value: TProc<TCanvas> ); begin FPaintBoxProc := Value; if not Assigned( Value ) then begin PaintBox1.Height := 0; PaintBox1.Width := 0; end; PaintBox1.Invalidate; end; end.
Delphi-Quellcode:
type
TProcUtil = class class function Combine<T>( Collection: TEnumerable < TProc < T >> ): TProc<T>; overload; class function Combine<T>( Values: TArray < TProc < T >> ): TProc<T>; overload; end; { TProcUtil } class function TProcUtil.Combine<T>( Values: TArray < TProc < T >> ): TProc<T>; begin Result := procedure( Arg: T ) var LProc: TProc<T>; begin for LProc in Values do LProc( Arg ); end; end; class function TProcUtil.Combine<T>( Collection: TEnumerable < TProc < T >> ): TProc<T>; begin Result := Combine<T>( Collection.ToArray ); end; |
AW: Suche Konzept: Bild mit unbekannter Größe
Entweder Du machst es wie beschrieben, oder Du nimmst Dir ein Bitmap mit maximaler Größe, zeichnest dein Zeugs rein, merkst Dir dabei X/Y Min/Max und blittest (muh? "BitBlt") zum Schluß den Bereich in dein Ziel.
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 20:02 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz