Avatar billede stigc Nybegynder
12. marts 2000 - 20:49 Der er 6 kommentarer og
1 løsning

Grafik i Borland Builder

Jeg har lige fået Borland Builder v.1.0, og har leget lidt med grafikken. Dvs jeg har brugt canvas og image, hvor sidste nænvte kan styres med top og left.

Hvordan laver jeg mere avanceret grafik. Det vil sige dobbelt buffering, eller styring af rasterstrålen, og gerne noget der er hurtigt...
Avatar billede soepro Nybegynder
13. marts 2000 - 09:52 #1
Dobbelt buffering ??? Styring af rasterstrålen ???
Avatar billede stigc Nybegynder
13. marts 2000 - 12:58 #2
Ja.....

kontrol af rasterstrålen bruger man nok ikke, men det var fint på commodore 64, da grafikken så ikke hakkede. Men dobbeltbuffering må da være mulig -> jeg ved det er. Det er vigtigt det virker under version 1.0
Avatar billede soepro Nybegynder
13. marts 2000 - 14:50 #3
Tænker du på muligheden for at opbygge grafik i eet (skjult) lag, mens et andet lag vises ??? Den hardware-mæssige det af dette kan du ikke styre - det tror jeg også vil være uklogt, når du bruger C++ Builder.

MEN ... du kan jo meget enkelt simulere tilsvarende funktionalitet ved simpelthen at have to TImage på din form - en som er visible og en som ikke er det. (Husk at køre med transparent - så kan du se hvis de begge er aktive.) Dit program skal så blotr have en bool for hvilken af de to der vises. I forhold til tegning osv. vil de så være smartest at du laver en TCanvas *VisibleCanvas og en TCanvas *HiddenCanvas som du så sætter til at pege på det synilige henholdsvis skjulte canvas. på den måde kan alle dine underrutiner der skal tegne i baggrund, bare tegne på HiddenCanvas - uanset om det så er den ene TImage eller den anden som er synlig p.t.

voif __fastcall DrawAll(void)
{
  if (Image2->Visible)
  {
    VisibleCanvas = Image1->Canvas;
    HiddenCanvas = Image2->Canvas;
    Image2->Visible = false;
    Image1->Visible = true;
  }
  else
  {
    Visisble->Canvas = Image2->Canvas;
    Hidden->Canvas = Image1->Canvas;
    Image1->Visible = false;
    Image2->Visible = true;
  }
  Update(); // Tvinger gentegning af formen.
} // DrawAll
:
void __fastcall HiddenDraw(void)
{
  Hidden->Canvas->Circle(0, 0, Width, Height);
}
:
void __fastcall VisibleDraw(void)
{
  Visible->Canvas->Circle(0, 0, Width, Height);
}

(Syntaksen på 'Circle' er sikkert ikke korrekt, men princippet funker.)
Avatar billede soepro Nybegynder
13. marts 2000 - 14:52 #4
Undskryld de magne stave- & tyrkfjel - vi mangler en stavekontrol i denne her boks ... Nå, du forstår nok meningen.
Avatar billede stigc Nybegynder
04. juni 2000 - 19:28 #5
Soepro>> Ja du svare jo på mange af mins spm. Det er jo lækkert nok. Jeg har nu lavet en dobbelbuffer rutine, med et memory bmp billede.

"Graphics::TBitmap* bm = new Graphics::TBitmap;"

Jeg tænkt det nok var hurtiger end at bruge "Timage" Men jeg syntes hastighedn stinker. Har bla. lavet en stjernehimmel med 300 stjerne (ingen 3d), som æder 60 % af min CPU tid på min 350 mhz maskine.

Hvad kan optimeres?
Avatar billede stigc Nybegynder
04. juni 2000 - 19:29 #6
Eller generelt: Hvordan laver man hurtig grafik, uden at bruge directX? Sætter selvfølgelig 100 poine på et ordentlig svar........
Avatar billede soepro Nybegynder
06. juni 2000 - 08:21 #7
Jeg vil tro at du skal udenom C++ Builders egene forms, og til at kalde Windows API'erne direkte. Næsten enhver VCL-komponent er en sammenstykning af allerede eksisterende Windows API-kald.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester