AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Multimedia Delphi Koordinatensystem in TImage
Thema durchsuchen
Ansicht
Themen-Optionen

Koordinatensystem in TImage

Ein Thema von sam24 · begonnen am 29. Okt 2002 · letzter Beitrag vom 30. Okt 2002
Antwort Antwort
sam24

Registriert seit: 20. Jun 2002
3 Beiträge
 
#1

Koordinatensystem in TImage

  Alt 29. Okt 2002, 16:58
Hallo an alle,

eigentlich hat es trivial geklungen. Ich will ein Koordinatensystem in einem TImage zeichnen (MoveTo, LineTo). Funktioniert auch. Als Hilfslinien sind mir die Linien allerdings etwas zu dick. Wenn ich das image dann auch noch vergrößere, werden die Linien heftig dick. Ich habe bisher mit folgenden Einstellungen keinen Erfolg gehabt.

Code:
  Image1.Canvas.Pen.Style := PsDot;
  Image1.Canvas.Pen.Width := 1;
  Image1.Canvas.Pen.Color := ClBlack;
  Image1.Canvas.Font.Size := 4;
  Image1.Picture.Bitmap.Width := ClientWidth;
  Image1.Picture.Bitmap.height := ClientHeight;
Muß doch eigentlich irgendwie einfach gehen.

Danke
  Mit Zitat antworten Zitat
Sebastian Nintemann
(Gast)

n/a Beiträge
 
#2
  Alt 29. Okt 2002, 18:30
Hallo!

Also, was ist jetzt das Problem? Das Größe ändern?
Und was meinst du mit Hilfslinien? Um das dicker werden beim vergrößern (oder möglicherweise das verschwinden von Teilen deines Koordinatensystems beim verkleinern) zu verhindern wirst du wohl nicht drumrum kommen beim neu zeichnen des TImage (also beim OnPaint) die Achsen jeweils neu zu zeichnen, und beim größe ändern dann neu zu zeichnen (OnPaint dürfte dann eh ausgelöst werden). Wenn du das Koordinatensystem auch noch über ein geladenes Bild zeichnen willst, musst du dieses wohl auch jedesmal neu auf das TImage zeichnen. Du hast also ein TBitmap mit deiner Graphik im Speicher, und beim OnPaint zeichnest du es auf das Canvas, und danach das Achsensystem. Dafür würde ich dir allerdings eine TPaintBox empfehlen.
Meld dich einfach bei Fragen oder wenn ich hier was falsch verstanden hab

Gruß, Sebastian
  Mit Zitat antworten Zitat
sam24

Registriert seit: 20. Jun 2002
3 Beiträge
 
#3
  Alt 30. Okt 2002, 09:19
Hallo GrotesQuery,

das Problem besteht schon im ersten Zeichnen des Koordinatensystems. Die Linien werden einfach viel zu dick. Ich habe bislang keine Lösung gefunden, dünne Linien zu erzeugen. Das Vergrößern ist eigentlich nur das Folgeproblem.

Gruß Sam24
  Mit Zitat antworten Zitat
Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.105 Beiträge
 
Delphi 11 Alexandria
 
#4
  Alt 30. Okt 2002, 09:39
Moin Sam,

da Du mit Pen.Width die Stiftbreite in Pixel setzt, und Du, zumindest in Deinem Beispielcode, hier den Wert 1 eingetragen hast, wird keine schmalere Linie möglich sein.
Weniger als ein Pixel Breite geht nicht.
Tschüss Chris
Die drei Feinde des Programmierers: Sonne, Frischluft und dieses unerträgliche Gebrüll der Vögel.
Der Klügere gibt solange nach bis er der Dumme ist
  Mit Zitat antworten Zitat
DrDangerous

Registriert seit: 5. Okt 2002
17 Beiträge
 
#5
  Alt 30. Okt 2002, 09:50
Hallo Sam,

wie Christrian schon sagte, Linienbreiten unterhalb 1 Pixel wirst Du nicht schaffen können. Du kannst allenfalls die Farbe der Linien anpassen, so dass sie rein optisch weniger ins Gewicht fallen; zum Beispiels durch Verwendung eines Grautones.

Ich habe mal mit folgendem Code ein Raster auf ein Bild gemalt. Vielleicht kannst Du anhand dieses Beispiels erklären, was daran jetzt noch zu dick ist.
(Es geht mir im Moment weniger um die nicht vorhandene Eleganz dieses Codes... also bitte nicht meckern..)

Code:
[b]procedure[/b] TForm1.btn_DrawGridClick(Sender: TObject);
[b]const[/b] GridSize : Integer = 20;
[b]var[/b] xSteps, ySteps, xIndex, yIndex : Integer;
[b]begin[/b]
  [b]If not[/b] Image1.Picture.Bitmap.Empty [b]Then[/b]
    [b]With[/b] Image1.Picture.Bitmap [b]Do[/b]
    [b]Begin[/b]
      xSteps:= Width [b]div[/b] GridSize;
      ySteps:= Height [b]div[/b] GridSize;

      [b]With[/b] Canvas [b]Do[/b]
      [b]Begin[/b]

        Pen.Width:= 1;
        Pen.Color:= clSilver;
        Pen.Style:= psSolid;

        [b]For[/b] xIndex:= 0 [b]To[/b] xSteps [b]Do[/b]
          [b]For[/b] yIndex:= 0 [b]To[/b] ySteps [b]Do[/b]
          [b]Begin[/b]
            MoveTo( 0, yIndex*GridSize ); LineTo( Width, yIndex*GridSize );
            MoveTo( xIndex*GridSize, 0 ); LineTo( xIndex*GridSize, Height );
          [b]End;[/b]
      [b]End;[/b]
    [b]End[/b]
  [b]Else[/b]
    ShowMessage( 'Kein Bild verfügbar.' );
[b]end;[/b]
Das von diesem Code produzierte Bild siehst Du im Anhang. Wenn man dieses jetzt mitsamt des Gitters vergrößert, so werden die Linien natürlich ebenfalls größer (breiter). Als Abhilfe könntest Du jeweils das Original skalieren und erst danach das Gitter zeichnen. Die Operation geht recht schnell und Du bist wieder bei Linienbreiten von genau 1 Pixel.
Miniaturansicht angehängter Grafiken
253_1035971415.gif  
  Mit Zitat antworten Zitat
sam24

Registriert seit: 20. Jun 2002
3 Beiträge
 
#6
  Alt 30. Okt 2002, 14:57
Danke an alle, das wars.

Kurz zur Erkärung: Ich habe auf den Canvas des Image gemalt.
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:57 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