Einzelnen Beitrag anzeigen

Benutzerbild von turboPASCAL
turboPASCAL

Registriert seit: 8. Mai 2005
Ort: Sondershausen
4.274 Beiträge
 
Delphi 6 Personal
 
#9

Re: pixelweises Zeichnen von PaintBox beschleunigen

  Alt 9. Jul 2008, 21:19
Zitat von mikro-ViiV:
Ich hab das gerade mal mit den virtuellen Canvas probiert, aber ich bekomms einfach nicht hin.

Delphi-Quellcode:
var virtcanvas: Tcanvas;

...

virtcanvas.Pixels[x,y]:=Grauwert;
Fehlt da vielleicht noch irgendetwas bei der Erstellung des virtuellen Canvas.
Mus man da vielleicht die Größe oder so noch festlegen, und wenn ja, wie macht man das? Height und Widht gibts da ja nicht.
Äh, ja ? :glaskugl: Der Rest zw. "..." und "virtcanvas.Pixels".

Delphi-Quellcode:
var
  virtcanvas: TCanvas;
  x, y: Integer;
begin
  virtcanvas := TCanvas.Create;
  for y := 0 to 127 do
    for x := 0 to 127 do
      virtcanvas.Pixels[x, y] := RGB(Grauwert, Grauwert, Grauwert);

  // ...
end;
Ich emfpele Dir ein Virtuelles Bitmap, damit ist es einfacher zu "Werkeln". Ein Canvas speichert nicht, sondern Zeichnet nur.
Also:

Delphi-Quellcode:
unit Unit1;

interface

uses
  Windows, Messages, ...

type
  TForm1 = class(TForm)
    PaintBox1: TPaintBox;
    Button1: TButton;
    procedure FormCreate(Sender: TObject);
    procedure FormDestroy(Sender: TObject);
    procedure PaintBox1Paint(Sender: TObject);
    procedure Button1Click(Sender: TObject);
  private
    { Private-Deklarationen }
    GBBitmap: TBitmap;
    procedure ReadGBCamPixels;
    procedure ZeichneGBBitmap;
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

var
  GBCamPixelGrauW : Array [0..127, 0..127] of Byte;

procedure TForm1.FormCreate(Sender: TObject);
begin
  GBBitmap := TBitmap.Create; // Virt. Bitmap erzeugen
  GBBitmap.Width := 128; // Grösse festlegen
  GBBitmap.Height := 128;
  GBBitmap.Pixelformat := pf8bit; // 256 Farben od. Grauwerte
end;

procedure TForm1.FormDestroy(Sender: TObject);
begin
  GBBitmap.Free; // Virt. Bitmap freigeben
end;

procedure TForm1.PaintBox1Paint(Sender: TObject);
begin
  // Das Bitmap in der PBox zeichen (lassen beim verschieben des Frensters etc.)

  PaintBox1.Canvas.Draw(0, 0, GBBitmap);
end;

procedure TForm1.ReadGBCamPixels;
var
  x,y : Integer;
begin
  // Einlesen der Cam Werte aus der GBCam.
  // ...
  // ...
  // ...

  // for y := 0 to 128 do
  // for x := 0 to 128 do
  // GBCamPixelGrauW[x, y] := ...
end;

procedure TForm1.ZeichneGBBitmap;
var
  x,y : Integer;
begin
  // Hiier das Bitmap miit den Farbpixeln zeichnen

  for y := 0 to 128 do
    for x := 0 to 128 do
      GBBitmap.Canvas.Pixels[x, y] :=
        RGB(GBCamPixelGrauW[x, y], GBCamPixelGrauW[x, y], GBCamPixelGrauW[x, y]);
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  // The Action

  ReadGBCamPixels;
  ZeichneGBBitmap;
  PaintBox1.Repaint;
end;

end.
Matti
Meine Software-Projekte - Homepage - Grüße vom Rüsselmops -Mops Mopser
  Mit Zitat antworten Zitat