TextOut auf Timage mit Width>4096



  • Hallo Leute!

    ich habe ein TImage in einer ScrollBox. Das ding kann unter Umständen ziemlich groß werden, also schon mal ein paar Tausend pixel in die breite, höhe ist konstant. konkret benutze ich das Image um mir einen Maßstab selber zu malen (in einer Scrollbox).
    das problem ist nun, dass ich es nicht schaffe, text auszugeben auf Pixel-Positionen, die größer als 4096 sind.
    hingegen funktioniert das zeichnen mit Canvas->LineTo() problemlos...

    hab das ganze mal so getestet:

    int weite = 5000;
    Image1->Width = weite;
    for(int i=0; i<weite; i+=100)
    { Image1->Canvas->MoveTo(i, 0);
      Image1->Canvas->LineTo(i, 10);
    
      Image1->Canvas->TextOut(i, 15, IntToStr(i));
      Image1->Canvas->TextOutA(i, 35, IntToStr(i));
    
      TRect coord(i, 55, i+30, 75);
      Image1->Canvas->TextRect(coord,i, 55, IntToStr(i));
    }
    

    Die Linien werden, wie es sein sollte, über die ganze breite im abstand von 100px gezeichent, die schrift fehlt aber ab der position 4100. (bei allen drei ausgabefunktionen)

    allerdings, und das ist das interessante, setzt ich die weite = 10000 (statt 5000), passt wieder alles, also auch die schrift über 4100...

    schon mal jemand erfahrungen mit etwas ähnlichem gemacht?
    was kann ich machen, ausser mehrere einzel-images zu benutzen?

    [edit] ich benutze den BCB5 Standard [/edit]

    [ Dieser Beitrag wurde am 17.02.2003 um 14:10 Uhr von flosko editiert. ]



  • hm, ich umgehe jetzt das problem, indem ich den Text in ein temporäres BMP schreibe und das ganze dann in meine zielgrafik kopiere...nicht gerade fein, aber fällt wem was besseres ein? nur her damit... 😉

    int i = ...
    Graphics::TBitmap *tempbmp = new Graphics::TBitmap();
    tempbmp->Width = tempbmp->Canvas->TextWidth(IntToStr(i));
    tempbmp->Height = tempbmp->Canvas->TextHeight(IntToStr(i));
    tempbmp->Canvas->TextOutA(0,0, IntToStr(i));
    TRect src(0,0,tempbmp->Width, tempbmp->Height);
    TRect dst(x,y,x+tempbmp->Width,y+tempbmp->Height);
    beschr->Canvas->CopyRect(dst, tempbmp->Canvas,src);
    delete tempbmp;
    


  • Könnte es ggf. eleganter sein, mal in Schritten auszuprobieren, wie groß "weite" sein muß, damit alle Zeichenoperationen durchgeführt werden? Danach das Bild wieder auf 5000 verkleinern? Wenn es nicht so viel ist, kann das speichergünstiger sein.

    Probier es vielleicht auch mal außerhalb der IDE bei geschlossenem Projekt. Der BCB hat auch gewisse Maxima, die er verwalten kann. Die erstellte App hat die Beschränkungen dann nicht meher. Muß hier nicht so sein, aber Probieren kostet ja nichts. :p


Anmelden zum Antworten