Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi Ausrichtung Bitmap bei FillRect (https://www.delphipraxis.net/7239-ausrichtung-bitmap-bei-fillrect.html)

Mario 6. Aug 2003 14:33


Ausrichtung Bitmap bei FillRect
 
Hallo,

ich fülle einen rechteckigen Bereich in einem Canvas mit einem Bitmap-Brush 8x8 Pixel. Nun wird dieser scheinbar immer am Canvas-Punkt (0,0) ausgerichtet, nicht aber an der Ecke vom Rechteck.

Weiß jemand, wie ich das beieinflussen kann?

Luckie 6. Aug 2003 14:43

Re: Ausrichtung Bitmap bei FillRect
 
Na dann gib in der TRect-Struktur doch an, wo es hin soll.

Mario 6. Aug 2003 14:55

Re: Ausrichtung Bitmap bei FillRect
 
Liste der Anhänge anzeigen (Anzahl: 1)
Zitat:

Zitat von Luckie
Na dann gib in der TRect-Struktur doch an, wo es hin soll.

Habe ich gemacht, doch dann sah es leider so aus:
http://www.delphipraxis.net/attached_files/demo.gif

Die zwei gefüllten Rechtecke sind auf dem gleichen Canvas plaziert und die Füllung wird nur am Canvas ausgerichtet. Ich hatte vergessen zu sagen, das der Effekt natürlich erst bei Kachelung stört...

Luckie 6. Aug 2003 15:02

Re: Ausrichtung Bitmap bei FillRect
 
Zeig mal Code. Oder häng ein kleines Demo-Projekt an.

Mario 6. Aug 2003 15:15

Re: Ausrichtung Bitmap bei FillRect
 
Liste der Anhänge anzeigen (Anzahl: 1)
Klar!

Im Beispiel anbei werden zwei, um zwei Pixel vertikal verschoben, Rechtecke gezeichnet. Deutlich zu sehen ist, dass die Strucktur trotzdem wie eine große Fläche angelegt ist. Ich möchte aber gern den Startpunkt der Kachelung definieren, damit ich auch so versetzte Rechtecke jederzeit identisch füllen kann.

negaH 6. Aug 2003 16:40

Re: Ausrichtung Bitmap bei FillRect
 
Code:
SetBrushOrgEx(

    HDC hdc,   // handle of device context
    int nXOrg,   // x-coordinate of new origin
    int nYOrg,   // y-coordinate of new origin
    LPPOINT lppt    // points to previous brush origin
   );
Gruß Hagen

negaH 6. Aug 2003 17:33

Re: Ausrichtung Bitmap bei FillRect
 
Ums dir einfacher zu machen:
Delphi-Quellcode:
function SetBrushOrg(Canvas: TCanvas; X,Y: Integer): TPoint; overload;
begin
  if not SetBrushOrgEx(Canvas.Handle, X, Y, @Result) then Result := Point(0, 0);
end;

function SetBrushOrg(Canvas: TCanvas; P: TPoint): TPoint; overload;
begin
  if not SetBrushOrgEx(Canvas.Handle, P.X, P.Y, @Result) then Result := Point(0, 0);
end;

// Anwendung mit

procedure PaintRectangle(Canvas: TCanvas; X,Y,W,H: Integer);
var
  SaveOrg: TPoint;
begin
  SaveOrg := SetBrushOrg(Canvas, X {mod 8}, Y {mod 8});
  try
    Canvas.Rectangle(X, Y, W, H);
  finally
    SetBrushOrg(Canvas, SaveOrg);
  end;
end;
Das "mod 8" kann eventuell nötig sein und sollte genauso groß wie die Bitmap vom Brush sein.

Gruß Hagen

Mario 7. Aug 2003 07:13

Re: Ausrichtung Bitmap bei FillRect
 
Super, funktioniert :dancer:


Alle Zeitangaben in WEZ +1. Es ist jetzt 09:48 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz