Avatar billede marvind Nybegynder
12. september 2007 - 16:19 Der er 16 kommentarer og
1 løsning

Farve fra koordinat?

jeg prøver at finde en måde at finde farven under musen eller på bestemte koordinater i andre programmer end mit.
f.eks finde farven for koordinat 100, 100 i internet explorer.
Avatar billede peterpedersen Nybegynder
12. september 2007 - 16:49 #1
Du mener at du vil lave et eyedropper tool ?

ikke fordi jeg kan hjælpe > men så bare folk ved hvad du mener ;)
Avatar billede marvind Nybegynder
12. september 2007 - 17:01 #2
Præcis! jeg har ikke kunne huske hvad det hed i hundrede år :P
Avatar billede tjacob Juniormester
12. september 2007 - 20:13 #3
Her er en måde at gøre det på:

Lav et Bitmap af hele skærmen, og brug GetPixel på det:

    Function GetScreenPixel(ByVal X As Integer, ByVal Y As Integer) As Color

        Dim oBitmap As New Bitmap(My.Computer.Screen.Bounds.Width, My.Computer.Screen.Bounds.Height)
        Dim g As Graphics = Graphics.FromImage(oBitmap)
        g.CopyFromScreen(New Point(0, 0), New Point(0, 0), New Size(My.Computer.Screen.Bounds.Width, My.Computer.Screen.Bounds.Height))
        g.DrawImage(oBitmap, New Point(0, 0))
        g.Dispose()
        Dim cColor As Color = oBitmap.GetPixel(X, Y)
        oBitmap.Dispose()
        Return cColor

    End Function

Du kan finde musens position med System.Windows.Forms.Cursor.Position
Avatar billede marvind Nybegynder
13. september 2007 - 10:43 #4
jeg får 2 fejl:
'CopyFromScreen' is not a member of 'System.Drawing.Graphics'.
Name 'My' is not declared.
Avatar billede tjacob Juniormester
13. september 2007 - 18:37 #5
Det forstår jeg ikke:
Graphics.CopyFromScreen er understøttet i .NET 3.0 og 2.0, men du sidder måske med en ældre version?

se her: http://msdn2.microsoft.com/en-us/library/system.drawing.graphics.copyfromscreen.aspx

My er en reference til Namespacet My, som bliver autogeneret hvis man opretter et nyt project (i hvert tilfælde i Visual Basic Express 2005). Det giver adgang til en masse funktioner omkring den computer man sidder ved. Jeg gik bare ud fra at du havde adgang til den -min fejl.

Screen objektet findes i System.Windows.Forms, og du skal måske bruge PrimaryScreen i stedet for, da der jo er brugere med flere skærme, eller er tilsluttet et TV.
Avatar billede tjacob Juniormester
13. september 2007 - 18:54 #6
Faktisk så SKAL du bruge PrimaryScreen, når den referes på denne måde, f.eks.:

System.Windows.Forms.Screen.PrimaryScreen.Bounds.Width
Avatar billede marvind Nybegynder
13. september 2007 - 20:12 #7
jeg bruger visual studio .net 2003 på vista.
jeg kigger lige lidt efter "My"
der står på microsofts hjemmeside at framework 3.0 er en del af vista,
så jeg fatter ikke helt Graphics.CopyFromScreen
Avatar billede nielle Nybegynder
13. september 2007 - 23:13 #8
VS 2003 laver 1.1 programmer. De kan slet ikke bruge 2.0 eller 3.0 - du skal skifte til VS 2005 eller VS 2008 (som er i beta).
Avatar billede tjacob Juniormester
14. september 2007 - 10:27 #9
Som jeg skrev i min kommentar 13/09 18:37:02 så behøver du ikke 'My' - du kan tilgå Screen klassen direkte.

Mht CopyFromScreen er det straks værre, der behøver du nok en opgradering som Nielle nævnte.

Men der er naturligvis andre måder at tage et screenshot på, her er et par stykker, men de er jo lidt mere omstændelige:
http://www.vbforums.com/showthread.php?t=287803
http://www.developerfusion.co.uk/show/4630/
http://mywiki.wikidot.com/forum/t-655
Avatar billede tjacob Juniormester
14. september 2007 - 16:06 #10
For i øvrigt er jeg kommet i tanke om, at med den metode jeg beskrev, så er det jo massivt overkill at tage et screenshot af hele skærmen. Man kunne for såvidt nøjes med at lave et bitmap på 1x1 pixel i det punkt man søger farven for............
Avatar billede tjacob Juniormester
14. september 2007 - 16:12 #11
sådan her:

        Dim oBitmap As New Bitmap(1,1)
        Dim g As Graphics = Graphics.FromImage(oBitmap)
        g.CopyFromScreen(New Point(X, Y), New Point(X + 1, Y + 1), New Size(1,1))
        g.DrawImage(oBitmap, New Point(0, 0))
        g.Dispose()
        Dim cColor As Color = oBitmap.GetPixel(0, 0)
        oBitmap.Dispose()
        Return cColor

Muligvis skal X erstattes med X-1 osv.
Avatar billede marvind Nybegynder
11. oktober 2007 - 14:58 #12
jeg får den her fejl
Error    1    'Return' statement in a Sub or a Set cannot return a value.    C:\*****\*****\Form1.vb    23    9 (Return cColor)

og hvis jeg bare fjerner linien (Return cColor) er cColor bare tom (dvs ingen farve)
Avatar billede tjacob Juniormester
11. oktober 2007 - 15:22 #13
Det er fordi Return hører til en funktion (det er den værdi der returneres).

I din form (for eksempel) lægger du funktionen:

Function GetScreenPixel(ByVal X As Integer, ByVal Y As Integer) As Color

    Dim oBitmap As New Bitmap(1,1)
    Dim g As Graphics = Graphics.FromImage(oBitmap)
    g.CopyFromScreen(New Point(X, Y), New Point(X + 1, Y + 1), New Size(1,1))
    g.DrawImage(oBitmap, New Point(0, 0))
    g.Dispose()
    Dim cColor As Color = oBitmap.GetPixel(0, 0)
    oBitmap.Dispose()
    Return cColor

End Function

Nu kan du kalde funktionen for eksempel fra en knap:

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

    Dim cColor as Color
    cColor = GetScreenPixel(25,25)

    End Sub

Dette vil give dig farven i punkt 25, 25

/tjacob
Avatar billede tjacob Juniormester
11. oktober 2007 - 15:31 #14
Hovsa, der er en lille fejl:

g.CopyFromScreen(New Point(X, Y), New Point(X + 1, Y + 1), New Size(1,1))

skal være sådan:

g.CopyFromScreen(New Point(X, Y), New Point(0, 0), New Size(1,1))
Avatar billede marvind Nybegynder
11. oktober 2007 - 15:58 #15
nu virker det :D!!! mange tak for hjælpen :D
smider du ikke lige et svar så du kan få dine point?
Avatar billede tjacob Juniormester
11. oktober 2007 - 16:10 #16
Godt du fik det til at virke ;)  -svar
Avatar billede nielle Nybegynder
11. oktober 2007 - 18:33 #17
Godt at du fik den til at virke :^)
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



IT-JOB

SporingsGruppen ApS

App-udvikler

Udviklings- og Forenklingsstyrelsen

Generalist med flair for økonomi i projekter og drift

Udviklings- og Forenklingsstyrelsen

Business Analyst med flair for test

Udviklings- og Forenklingsstyrelsen

Controller til økonomi og compliance