Avatar billede area404 Nybegynder
20. juni 2008 - 21:40 Der er 14 kommentarer og
1 løsning

farve "gennemsnit"

Hej,

jeg tager et screenshot som jeg så godt kunne tænkte mig at beregne hvor meget af billedet er rød, gul, eller blå.
altså et gennemsnit af farve intensiteten.

          myBitmap = Win32APICall.GetDesktop();

            int x = 1280; // Resolution
            int y = 1024;
            int posY = 0;
            int posX = 0;
            while (x > posX)
            {
                posX++;
                while (y > posY)
                {
                    posY++;
                    // HERE, CHECK EACH PIXEL
                    Color myColor = myBitmap.GetPixel(1, posY);
                    Color yeah = myBitmap.GetPixel(posX, posY);

                } // While X end
            } // While y end

Nogen idéer til hvordan dette kunne håndteres? Desuden får jeg overflow...

Vh Ron
Avatar billede area404 Nybegynder
20. juni 2008 - 21:45 #1
overflow var en fejl 40 ;-)
men det andet spørgsmål står stadig åbent!
Avatar billede lasserasch Juniormester
20. juni 2008 - 22:35 #2
Melder mig lige på sidevognen af denne. Kunne også godt tænke mig at vide hvordan man kan analysere sit billed. (Jeg har et webcam som peger på kaffemaskinen på arbejdet! Har længe leget med en ide om at sekretæren skulle modtage en mail når kanden var ved at være tom :-) )

/Lasse
Avatar billede aaberg Nybegynder
20. juni 2008 - 23:15 #3
Følgende fikser i hvert fald din overflow.

myBitmap = Win32APICall.GetDesktop();

int x = 1280; // Resolution
int y = 1024;
int posY = 0;
int posX = 0;
while (x > posX)
{
 
  while (y > posY)
  {
      // HERE, CHECK EACH PIXEL
      Color myColor = myBitmap.GetPixel(1, posY);
      Color yeah = myBitmap.GetPixel(posX, posY);
      posY++;

  } // While X end
  posX++;
} // While y en
Avatar billede aaberg Nybegynder
20. juni 2008 - 23:26 #4
Prøv følgende kode!

Bitmap myBitmap = Win32APICall.GetDesktop();

            int totalRed = 0;
            int totalGreen = 0;
            int totalBlue = 0;

            int x = 1280; // Resolution
            int y = 1024;
            int posY = 0;
            int posX = 0;
            while (x > posX)
            {
                posY = 0;
                while (y > posY)
                {
                    // HERE, CHECK EACH PIXEL
                    Color pixelColor = myBitmap.GetPixel(posX, posY);
                    totalRed += pixelColor.R;
                    totalGreen += pixelColor.G;
                    totalBlue += pixelColor.B;
                    posY++;
                } // While X end
                posX++;
            } // While y en

            int totalPixels = x * y;
            int avgRed = totalRed / totalPixels;
            int avgGreen = totalGreen / totalPixels;
            int avgBlue = totalBlue / totalPixels;

            MessageBox.Show("R: " + avgRed + ", G: " + avgGreen + ", B: " + avgBlue);
Avatar billede area404 Nybegynder
21. juni 2008 - 00:13 #5
det virker bare aaberg80... ville det være muligt at tage sreenshot af video?
Avatar billede aaberg Nybegynder
21. juni 2008 - 10:15 #6
Det er forøvrigt lidt mere elegant at bruge for løkker:

Bitmap myBitmap = Win32APICall.GetDesktop();

            int totalRed = 0;
            int totalGreen = 0;
            int totalBlue = 0;

            int x = 1280; // Resolution
            int y = 1024;
            for(int posX = 0; posX < x; posX++)
            {
                for (int posY = 0; posY < y; posY++)
                {
                    // HERE, CHECK EACH PIXEL
                    Color pixelColor = myBitmap.GetPixel(posX, posY);
                    totalRed += pixelColor.R;
                    totalGreen += pixelColor.G;
                    totalBlue += pixelColor.B;
                }
            }

            int totalPixels = x * y;
            int avgRed = totalRed / totalPixels;
            int avgGreen = totalGreen / totalPixels;
            int avgBlue = totalBlue / totalPixels;

            MessageBox.Show("R: " + avgRed + ", G: " + avgGreen + ", B: " + avgBlue);

Med hensyn til video screenshot, så ved jeg ikke hvordan dette skal gøres. Jeg tror ikke Windows har funktionalitet til at gøre det, men det er muligt der findes noget software derude som kan.
Avatar billede mysitesolution Nybegynder
21. juni 2008 - 18:53 #7
Er den kode ikke vanvittig langsom? hvis det er tilfældet, så har jeg nok noget der er en del hurtigere
Avatar billede area404 Nybegynder
21. juni 2008 - 19:28 #8
Ja, tager enormt mange ressourcer. Noget der var hurtigere ville da være rart! Jeg accepterer alligevel aaberg80's svar (tak!). Jeg opretter et spm hvis du også vil have point ;-)
Avatar billede mysitesolution Nybegynder
22. juni 2008 - 11:23 #9
Bitmap bm = Win32APICall.GetDesktop();

            BitmapData data = bm.LockBits(new Rectangle(new Point(0), bm.Size),
                ImageLockMode.ReadOnly, PixelFormat.Format24bppRgb);

            IntPtr ptr = data.Scan0;
            int startPoint = 0;
            byte* ptrByte = (byte*)ptr.ToPointer();
            byte* endloc = ptrByte + data.Width * data.Height * 3;

            int redTotal = 0;
            int greenTotal = 0;
            int blueTotal = 0;

            while (ptrByte < endloc)
            {
                blueTotal += (int)*(ptrByte++);
                greenTotal += (int)*(ptrByte++);
                redTotal += (int)*(ptrByte++);
            }

            int pixels = bm.Width * bm.Height;

            int redAvg = redTotal / pixels;
            int greenAvg = greenTotal / pixels;
            int blueAvg = blueTotal / pixels;

            bm.UnlockBits(data);

Har ikke lige haft mulighed for at teste netop dette, men hvis du ikke kan finde ud af, at rette evt. fejl, så sig til
Avatar billede area404 Nybegynder
22. juni 2008 - 13:12 #10
The type or namespace name 'BitmapData' could not be found (are you missing a using directive or an assembly reference?)   

Første fejl i koden :-)
Avatar billede mysitesolution Nybegynder
22. juni 2008 - 13:37 #11
using System.Drawing.Imaging;
Avatar billede mysitesolution Nybegynder
22. juni 2008 - 13:38 #12
og så skal du have unsafe komplilering slået til
Avatar billede area404 Nybegynder
26. juni 2008 - 00:01 #13
der sker ikke det store ved brug af den kode.. Selv om jeg starter programmet uden debugging..
Avatar billede area404 Nybegynder
26. juni 2008 - 01:00 #14
manglede lige "private unsafe void" ;-)
for points kan jeg oprette et nyt spm til dig "mysitesolution"?!
Avatar billede mysitesolution Nybegynder
26. juni 2008 - 21:33 #15
har du fået det til at virke? uden nogle rigtige ændringer?

nej er ligeglad med points :)
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