Warum sind die Linen Viel zu dick ?

Für Probleme bezüglich Grafik, Audio, GL, ACS, ...
Antworten
pluto
Lazarusforum e. V.
Beiträge: 7178
Registriert: So 19. Nov 2006, 12:06
OS, Lazarus, FPC: Linux Mint 19.3
CPU-Target: AMD
Wohnort: Oldenburg(Oldenburg)

Warum sind die Linen Viel zu dick ?

Beitrag von pluto »

Hallo,
ich habe mir 10 einfache Grafiken erstellt mit einem Grafik Programm.

Ich habe jetzt ein 2D Array:

Code: Alles auswählen

// Hier wird der 2D array einmal installisiert
procedure TForm1.ClearMap;
var
  x,y,r:Integer;
begin
  Randomize;
  r:=-1;
  for y:=0 to GameH do begin
    for x:=0 to GameW do begin
      Map[x,y]:=TGameItem.Create;
      Map[x,y].bmp:=TBitmap.Create;
      Map[x,y].bmp.Transparent:=False;
      Map[x,y].bmp.TransparentColor:=clWhite;
      Map[x,y].bmp.Width:=40;
      Map[x,y].bmp.Height:=40;
      Map[x,y].bmp.Canvas.FillRect(0,0,40,40);
      r:=RandomZahl([1,2,3,4,5,6,7,8,9,10]);
      Map[x,y].bmp.LoadFromFile('/home/pluto/daten/eigene/lazarus/r2/bild'+intTostr(r)+'.bmp');
      map[x,y].Moved:=True;
    end;
  end;
end;
// Und Hier gezeichnet
procedure TForm1.DrawMap;
var
  x,y,mx,my:Integer;
begin
//  Buffer.Canvas.Pen.Mode:=pmWhite;
  for y:=0 to GameH do begin
    for x:=0 to GameW do begin
      mx:=x*GameS; my:=y*GameS;
      BitBlt(buffer.canvas.Handle,mx,my,GameS,GameS,map[x,y].bmp.Canvas.Handle,0,0,SRCCOPY);
//      Buffer.Canvas.Draw((x*GameS),(y*(GameS)),map[x,y].bmp);
    end;
  end;
  PaintBox1Paint(self);
end;


Das Komische dabei ist nur das es so aussieht wie auf dem Bild im Anhang.
Z.b. diese Diecken Linen stören... und ich weiß nicht wie sie entstehen :( :(

in ClearMap erstelle ich eine Zufaulst Karte. In allen Bilder verwende ich den gleichen Linen Typ
im zweiten Bild ist das gut zu sehen.

Ich vermute die Bilder überlagern sich... aber warum ? es dürfte doch nicht so ein "Falsches" Bild entstehen. oder ?
Jedes Bild ist 40X40 Pixel groß !
Dateianhänge
r2.png
Bildschirmfoto-r2 - Datei-Browser.png
MFG
Michael Springwald

monta
Lazarusforum e. V.
Beiträge: 2809
Registriert: Sa 9. Sep 2006, 18:05
OS, Lazarus, FPC: Linux (L trunk FPC trunk)
CPU-Target: 64Bit
Wohnort: Dresden
Kontaktdaten:

Beitrag von monta »

Also ist doch eigentlich logisch, oder ich irre mich:

Du legst die einzelnen Bilder immer exakt nebeneinander. Die Lienien der einzelnen Bilder sind genau am äußersten Rand.
Dadurch ergeben zwei Teile, welche die Linien an ihrer Konaktfläche haben natürlich eine doppelt so breite Linie (2px) als ein Teil mit Linie, welches an einem anderen ohne Linie liegt.

Abhilfe dürfte es schaffen, die Teile einfach jeweils um Liniendicke (1px?) zu überlappen, und schon sind alle Linien gleich dick.
Johannes

pluto
Lazarusforum e. V.
Beiträge: 7178
Registriert: So 19. Nov 2006, 12:06
OS, Lazarus, FPC: Linux Mint 19.3
CPU-Target: AMD
Wohnort: Oldenburg(Oldenburg)

Beitrag von pluto »

genau sowas habe ich mir schon gedacht. Könntest du mir ein kleines Beispiel geben, wegen dem Überlappen ?
Ich wollte auch schon alle Linen verschieben um 1PX so das ein Weißer Rand entsteht.
MFG
Michael Springwald

monta
Lazarusforum e. V.
Beiträge: 2809
Registriert: Sa 9. Sep 2006, 18:05
OS, Lazarus, FPC: Linux (L trunk FPC trunk)
CPU-Target: 64Bit
Wohnort: Dresden
Kontaktdaten:

Beitrag von monta »

Du musst doch nur jeweils 1 abziehen, wenn du die einzelnen Bilder ins große kopierst, das sollte doch auch ohne Beispiel machbar sein ;)
Johannes

pluto
Lazarusforum e. V.
Beiträge: 7178
Registriert: So 19. Nov 2006, 12:06
OS, Lazarus, FPC: Linux Mint 19.3
CPU-Target: AMD
Wohnort: Oldenburg(Oldenburg)

Beitrag von pluto »

habe ich versucht, geht leider nicht. Ich denke ich werde die Linen bei allen 10 Bildern um 1Pixel verschieben. Dann dürfte das Problem gelöst sein.

Wobei ich mir hier noch nicht sicher bin, ob das Problem dadurch wirklich behoben ist.

Ich habe bei der x und y Position jeweils 1 abgezongen. bei der Größe geht es leider nicht. da ich sonst die Line z.b. Rechts nicht mehr sehen kann.
MFG
Michael Springwald

monta
Lazarusforum e. V.
Beiträge: 2809
Registriert: Sa 9. Sep 2006, 18:05
OS, Lazarus, FPC: Linux (L trunk FPC trunk)
CPU-Target: 64Bit
Wohnort: Dresden
Kontaktdaten:

Beitrag von monta »

du darfst nicht 1 abziehen, sondern wenn du es so machst wie oben, x bzw y.
Korrekt gesagt Linienbreite*x und Linienbreite*y
Johannes

pluto
Lazarusforum e. V.
Beiträge: 7178
Registriert: So 19. Nov 2006, 12:06
OS, Lazarus, FPC: Linux Mint 19.3
CPU-Target: AMD
Wohnort: Oldenburg(Oldenburg)

Beitrag von pluto »

Jetzt sieht es so aus wie im Anhang.
Dateianhänge
Bildschirmfoto-R2.png
MFG
Michael Springwald

monta
Lazarusforum e. V.
Beiträge: 2809
Registriert: Sa 9. Sep 2006, 18:05
OS, Lazarus, FPC: Linux (L trunk FPC trunk)
CPU-Target: 64Bit
Wohnort: Dresden
Kontaktdaten:

Beitrag von monta »

?
hast du plus statt minus gerechnet oder wie?
Johannes

pluto
Lazarusforum e. V.
Beiträge: 7178
Registriert: So 19. Nov 2006, 12:06
OS, Lazarus, FPC: Linux Mint 19.3
CPU-Target: AMD
Wohnort: Oldenburg(Oldenburg)

Beitrag von pluto »

ich habe alle Bilder geändert und um 1 PX verschoben, weil so wie du es meinst, verstehe ich das nicht: Linienbreite*x
x ist doch z.b. 0.
Jedes Bild ist 40*40 Pixel Groß und ich habe ein 2D Array.......
MFG
Michael Springwald

monta
Lazarusforum e. V.
Beiträge: 2809
Registriert: Sa 9. Sep 2006, 18:05
OS, Lazarus, FPC: Linux (L trunk FPC trunk)
CPU-Target: 64Bit
Wohnort: Dresden
Kontaktdaten:

Beitrag von monta »

ja, logisch das das erste x null ist. Aber die ersten Teile musst du doch auch nicht verrücken, da sie ja am Rand logischer Weise sich mit keiner Linie des Nachbarteils überschneiden können. Daher musst du ja auch mit x*... Rechnen.
Johannes

Euklid
Lazarusforum e. V.
Beiträge: 2808
Registriert: Fr 22. Sep 2006, 10:38
OS, Lazarus, FPC: Lazarus v2.0.10, FPC 3.2.0
Wohnort: Hessen
Kontaktdaten:

Beitrag von Euklid »

Alternativ könntest du die Linien auch einfach mit MoveTo und LineTo zeichnen? Wäre eventuell weniger Arbeit, je nachdem, wie du dieses Muster erzeugst.

pluto
Lazarusforum e. V.
Beiträge: 7178
Registriert: So 19. Nov 2006, 12:06
OS, Lazarus, FPC: Linux Mint 19.3
CPU-Target: AMD
Wohnort: Oldenburg(Oldenburg)

Beitrag von pluto »

@Euklid Das habe ich schon versucht nach 5 Formen habe ich aufgeben, weil sich das gleiche Muster zeigt wie bei den anderen.

@monta
ich mache doch schon x*40 damit die angezeigt werden
MFG
Michael Springwald

monta
Lazarusforum e. V.
Beiträge: 2809
Registriert: Sa 9. Sep 2006, 18:05
OS, Lazarus, FPC: Linux (L trunk FPC trunk)
CPU-Target: 64Bit
Wohnort: Dresden
Kontaktdaten:

Beitrag von monta »

pluto hat geschrieben:ich mache doch schon x*40 damit die angezeigt werden


Ja, aber genau dadurch kommen zwei dicke Linien aufeinander.

Also x*40 - x.

Dann mach alles außer die Linien Transparent und du hast keinerlei Probleme.
Johannes

pluto
Lazarusforum e. V.
Beiträge: 7178
Registriert: So 19. Nov 2006, 12:06
OS, Lazarus, FPC: Linux Mint 19.3
CPU-Target: AMD
Wohnort: Oldenburg(Oldenburg)

Beitrag von pluto »

BESTEN DANK
Dieser TIPP ist/war gold wert. Jetzt sieht es so aus wie es aussehn sollte.

Ich habe vor das Verrückte Laburient zu Schreiben.
Das Prinzip.....
MFG
Michael Springwald

Antworten