Zeichnen mit Image



  • Hallo,

    kann mir jemand ein code Beispiel schreiben, wie man mit Image etwas zeichnet.

    Es geht mir nur um ein erstes Codebeispiel, egal wass gezeichnet wird
    ob Kreis, rechteck, Dreieck Strichmännchen....

    Danke im Voraus

    LG
    Eliza



  • TCanvas *pCanvas = Image1->Canvas;
       pCanvas->Brush->Color = clRed;
       pCanvas->Brush->Style = bsDiagCross;
       pCanvas->Ellipse(0, 0, Image1->Width, Image1->Height);
    


  • Super Danke! 🙂 🙂

    Es zeichnet jetzt einen eliptischen Kreis.

    Aber kannst du die Zeilen vielleicht etwas kommentieren/erklären, denn verstehen tue ich es nicht.
    Was ist TCanvas? Was ist pCanvas warum zeiger *TCanvas und so?

    Aber danke schonmal bis hierhin.

    Liebe Grüße
    Eliza



  • Korrekterweise müsste TCanvas *pCanvas gecastet werden.
    Das es ein Zeiger ist, hast du ja schon erkannt.
    Dies Thema lässt sich schlecht in wenigen Sätzen näherbringen.

    Canvas ist schlicht gesagt die abstrakte Zeichenfläche des Image und auch vieler anderer Komponenten.



  • kannst du mir vielleicht auch helfen beim Zeichnen von einem x,y Diagramm (kartesisches Produkt) um dann eine Funktion z.B sinus zu zeichnen.
    Habe es selbst versucht.
    Aber verstehe irgendwie nicht wie das mit der Graphik funktoniert.

    Danke.

    LG Eliza



  • Hmm,

    Stichwort Canvas->Pixel bringt dich weiter. Da hast du auf jeden einzelnen Punkt der Zeichenfläche Zugriff.

    Vielleicht findest du im Netz ein Beispiel und meldest dich bei uns, wenn es klemmt? 😉



  • Danke für die Erklärung

    ich habe jetzt folgendes geschrieben

    TGraphic *diagram;
    TCanvas *pCanvas = Image1->Canvas;

    pCanvas->Pixels[100][100]=clRed;

    Der Compiler gibt zwar keinen Fehler aus, aber passieren tut auch nichts.
    Ich habe halt absolut keine Ahnung, wie weiter zu verfahren ist, damit er die x,y Pixel auch zeichnet. 🙄



  • Du hast einen einzigen Punkt gezeichnet. Der müsste aber zu sehen sein, wenn das Image so gross ist.

    // Linie pixelweise:
       Image1->Canvas->Brush->Color = clRed;
       for (int x=0; x < Image1->Width; x++) 
          Image1->Canvas->Pixels[x][x+1] = clRed;
    


  • Toll, durch deine Anregungen fange ich langsam an das Prinzip zu verstehen.

    ich habe jetzt den Code;

    Image1->Canvas->Brush->Color = clRed;
    for (int x=0; x < Image1->Height; x++)


    for (int y=0; y < Image1->Width; y++)
    Image1->Canvas->Pixels[y][0] = clBlack;

    Und er macht auch in etwa das was ich will. Eine vertikale rote Linie und eine horizontale schwarze. ABER.... die horizontale Linie ist oben und nicht etwa unten, wie man es bei einem X,Y Koordinatensystem erwarten würde.

    Brauche weitere Anregungen!

    LG
    Eliza



  • 0,0 ist bei TCanvas oben links, wie bei Grafikdarstellungen an Computern üblich.
    Siehe z.B. auch Desktopkoordinaten oder die Bemassung von TForm etc.



  • @jansen

    0,0 ist bei TCanvas oben links, wie bei Grafikdarstellungen an Computern üblich.

    Ah ja!! Jetzt wo du's sagst.... 🙂
    erinnere ich mich wieder.



  • Für das Zeichen von Linien benutze besser die Methoden 'MoveTo' und 'LineTo' (anstatt jeden Pixel einzeln zu setzen):

    Image1->Canvas->MoveTo(0, 0);
    Image1->Canvas->LineTo(100, 100);
    


  • Hi
    ich hätt da mal ne frage:
    Erzeugen Sie ein 2-dimensionales Feld von Zeichen (20 Zeilen a 41 Zeichen) und drucken sie eine
    Sinuskurve in dieses Feld (siehe Beispielskizze). Geben Sie diese Kurve dann in der Konsole mittels
    printf() aus. Benutzen Sie für den Sinus dieFunktion double sin(double x) aus math.h.



  • Hallo

    - "Ein Thema ein Thread, ein Thread ein Thema". Deine Frage hat nichts mit TImage zu tun
    - Deine Frage hat überhaupts nichts mit dem Builder bzw. seinen speziellen Erweiterungen zu tun, sondern ist offenbar ANSI-C (also falsches Forum)
    - Wir machen hier nicht deine Hausaufgaben, sondern helfen dir nur bei konkreten Fragen. Ohne eigene Vorarbeit, z.B. dein bisheriger Quellcode, wird dir kaum jemand antworten

    bis bald
    akari


Anmelden zum Antworten