1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48: 49: 50: 51: 52: 53: 54: 55: 56: 57: 58: 59: 60: 61: 62: 63: 64: 65: 66: 67: 68: 69: 70: 71: 72: 73: 74: 75: 76: 77: 78: 79: 80:
| Procedure TLinie.LinieVonBis(P1, P2 : TPoint); var i : integer; Steigung, b : Extended; PixelPunkt : TPoint; Begin With vZielImage.Canvas do Begin If P1.Y = P2.Y then Begin If P1.X < P2.X then For i := P1.X to P2.X do Begin If (vZielImage.Canvas.pen.mode <> pmNotXor) or (vZielImage.Canvas.Pixels[i, P1.Y] = vZielImage.Canvas.pen.Color) then vZielImage.Canvas.Pixels[i , P1.Y] := vZielImage.Canvas.pen.Color; End else if P2.X < P1.X then For i := P2.X to P1.X do If (vZielImage.Canvas.pen.mode <> pmNotXor) or (vZielImage.Canvas.Pixels[i, P1.Y] = vZielImage.Canvas.pen.Color) then vZielImage.Canvas.Pixels[i , P1.Y] := vZielImage.Canvas.pen.Color; Exit; End;
If P1.X = P2.X then Begin If P1.Y < P2.Y then For i := P1.Y to P2.Y do Begin If (vZielImage.Canvas.pen.mode <> pmNotXor) or (vZielImage.Canvas.Pixels[P1.X , i] = vZielImage.Canvas.pen.Color) then vZielImage.Canvas.Pixels[P1.X , i] := vZielImage.Canvas.pen.Color; End else if P2.Y < P1.Y then For i := P2.Y to P1.Y do If (vZielImage.Canvas.pen.mode <> pmNotXor) or (vZielImage.Canvas.Pixels[P1.X , i] = vZielImage.Canvas.pen.Color) then vZielImage.Canvas.Pixels[P1.X , i] := vZielImage.Canvas.pen.Color; Exit; End;
Steigung := (P1.Y - P2.Y) / (P1.X - P2.X); b := P1.Y - (Steigung * P1.X);
If (Steigung < 1) and (Steigung > -1) then Begin If P1.X < P2.X then For i := P1.X to P2.X do Begin PixelPunkt := Point(i , round(Steigung * i + b)); If (vZielImage.Canvas.pen.mode <> pmNotXor) or (vZielImage.Canvas.Pixels[PixelPunkt.X, PixelPunkt.Y] = vZielImage.Canvas.pen.Color) then vZielImage.Canvas.Pixels[PixelPunkt.X, PixelPunkt.Y] := vZielImage.Canvas.pen.Color End else if P1.X > P2.X then For i := P2.X to P1.X do Begin PixelPunkt := Point(i , round(Steigung * i + b)); If (vZielImage.Canvas.pen.mode <> pmNotXor) or (vZielImage.Canvas.Pixels[PixelPunkt.X, PixelPunkt.Y] = vZielImage.Canvas.pen.Color) then vZielImage.Canvas.Pixels[PixelPunkt.X, PixelPunkt.Y] := vZielImage.Canvas.pen.Color; End; End else if (Steigung >= 1) or (Steigung <= -1) then Begin If P1.Y < P2.Y then For i := P1.Y to P2.Y do Begin PixelPunkt := Point(round((i - b) / Steigung) , i); If (vZielImage.Canvas.pen.mode <> pmNotXor) or (vZielImage.Canvas.Pixels[PixelPunkt.X, PixelPunkt.Y] = vZielImage.Canvas.pen.Color) then vZielImage.Canvas.Pixels[PixelPunkt.X, PixelPunkt.Y] := vZielImage.Canvas.pen.Color End else if P2.Y < P1.Y then For i := P2.Y to P1.Y do Begin PixelPunkt := Point(round((i - b) / Steigung) , i); If (vZielImage.Canvas.pen.mode <> pmNotXor) or (vZielImage.Canvas.Pixels[PixelPunkt.X, PixelPunkt.Y] = vZielImage.Canvas.pen.Color) then vZielImage.Canvas.Pixels[PixelPunkt.X, PixelPunkt.Y] := vZielImage.Canvas.pen.Color End; End; End; End; End; |