Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Suche Konzept: Bild mit unbekannter Größe (https://www.delphipraxis.net/185880-suche-konzept-bild-mit-unbekannter-groesse.html)

Cubysoft 14. Jul 2015 23:43

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

Jens01 14. Jul 2015 23:58

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!

Sir Rufo 15. Jul 2015 11:57

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:
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.
Ein kleiner Hinweis sei noch gegeben:
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;

Dejan Vu 16. Jul 2015 06:49

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.
Seite 2 von 2     12   

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