Avatar billede mysitesolution Nybegynder
29. maj 2006 - 16:46 Der er 11 kommentarer og
1 løsning

Tegne grafik, C#

hej...


Er det muligt at få direkte adgang til grafikken af en Control? Går udfra at det nok vil blive unsafe... Altså det skal være så man direkte kan redigere i de 4 bytes (på 32 bit grafik). Ved man kan gøre det med et bitmap, og derefter tegne det på ens control.
Avatar billede Syska Mester
29. maj 2006 - 21:49 #1
private void button1_Click(object sender, EventArgs e)
        {
            Button b = (Button)sender as Button;
            if(b == null)
                return;

            Graphics g = b.CreateGraphics();
            g.DrawLine(Pens.Black, new Point(5, b.Height / 2), new Point(b.Width - 10, b.Height / 2));
        }

Så her kan du tegne når du trykker på den, men problemer som jeg ser det, er at der automatisk vil ske er Repaint af din form, så den igen mister den streg som bliver tegner når du trykker på knappen.....

Så du skal nok lave det med bitmap som du selv siger....

// ouT
Avatar billede mysitesolution Nybegynder
29. maj 2006 - 22:17 #2
ved godt man kan tegne med Graphics og det er jeg også rimelig erfaren i nu, men er ikke det jeg vil... jeg vil have adressen (pointers) til det sted hvor grafikken til mit component ligger og derefter kunne gøre noget lignede dette:

IntPtr p = adresse;

for (int x = 0; x < Width; x++)
{
  for (int y = 0; y < Height; y++)
  {
      byte red = p++;
      byte green = p++;
      byte blue = p++;
  }

  p += Stride;
}
Avatar billede mysitesolution Nybegynder
29. maj 2006 - 22:22 #3
forresten buzzz... du kan jo bare gøre det du gør i Paint event, og så bliver den jo derpå.
Avatar billede Syska Mester
29. maj 2006 - 23:53 #4
ja, men regnede ligesom med at du hele tiden ville tegne noget nyt.....

Hvad er problemet med at brige bitmap eller smide det i din OnPaint?

button1.Handle, så har du din pointer til knappen....

// ouT
Avatar billede mysitesolution Nybegynder
30. maj 2006 - 08:25 #5
vil have pointer til grafikken...

fordi det er hurtigere...
Avatar billede bitsch Nybegynder
30. maj 2006 - 08:33 #6
Du bør override OnPaint eller OnPaintBackground. Derved sikrer du dig at der bliver tegnet på det rigtige tidspunkt, og samtidig har du direkte adgang til dit grafiske object.
Avatar billede mysitesolution Nybegynder
30. maj 2006 - 12:22 #7
Gør jeg også nu, men vil have pointer til grafikken af controllen, så det kan gå 100 gange hurtigere...
Avatar billede bitsch Nybegynder
30. maj 2006 - 13:15 #8
Grafik skal jo kun tegnes hvis der er behov for det, så hvad er du egentligt ude på at opnå?
Avatar billede mysitesolution Nybegynder
30. maj 2006 - 13:31 #9
ved jeg godt... vil have, at jeg i min paintevent får direkte adgang til grafikken af min control, som dette:

IntPtr p = adresse;

for (int x = 0; x < Width; x++)
{
  for (int y = 0; y < Height; y++)
  {
      byte red = p++;
      byte green = p++;
      byte blue = p++;
  }

  p += Stride;
}
Avatar billede Syska Mester
30. maj 2006 - 15:06 #10
Hvorfor er det du vil have så meget mere hastighed..... hvad er det du ikke kan nu? eller hvad er det så virkelig skal gå så hurtigt?

// ouT
Avatar billede mysitesolution Nybegynder
30. maj 2006 - 16:00 #11
Kan bare godt lide at optimere... så ens program bruger så lidt som overhovedet muligt...
Avatar billede mysitesolution Nybegynder
03. juni 2006 - 11:43 #12
lukker
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
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

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