C# Как да получа пикселен цвят/данни от екрана?

Добре, така че се опитвам да стана малко по-напреднал тук и едно от нещата, които искам да науча как да правя, е да получавам пикселен цвят или данни от определена позиция на екрана. Търсих много, но изглежда повечето хора искат да направят това на c или c++.

Създавам програма, която сканира място на екрана за определен цвят. Ако това местоположение съдържа нещо с оранжев цвят, тогава числото в моя прозорец се превръща в 1 за вярно или 0 за невярно. Фонът на моя прозорец е прозрачен, ако това изобщо има значение.

Срещал съм само Graphics.CopyFromScreen() и bitmap.GetPixel();

Благодаря


person IzzM    schedule 07.04.2014    source източник
comment
Това помага ли:- stackoverflow.com/questions/1483928/   -  person Rahul Tripathi    schedule 07.04.2014
comment
Уау, благодаря, не можах да го намеря преди. Въпреки че се страхувах, че ще попадна отново на старото нещо [DLLImport] user32.dll. мразя да се забърквам с тези собствени функции на win32, защото е много по-напреднал, отколкото бих искал да отида, но благодаря, ще опитам.   -  person IzzM    schedule 07.04.2014


Отговори (2)


За да заснемете конкретен правоъгълник от екрана, използвайте следния код

    public Bitmap CaptureFromScreen(Rectangle rect)
    {
        Bitmap bmpScreenCapture = null;

        if (rect == Rectangle.Empty)//capture the whole screen
        {
            rect = Screen.PrimaryScreen.Bounds;
        }

        bmpScreenCapture = new Bitmap(rect.Width,rect.Height);

        Graphics p = Graphics.FromImage(bmpScreenCapture);


            p.CopyFromScreen(rect.X,
                     rect.Y,
                     0, 0,
                     rect.Size,
                     CopyPixelOperation.SourceCopy);


        p.Dispose();

        return bmpScreenCapture;
    }

За да получите цвета на определено място, използвайте функцията

    public Color GetColorFromScreen(Point p)
    {
        Rectangle rect = new Rectangle(p, new Size(2, 2));

        Bitmap map = CaptureFromScreen(rect);

        Color c = map.GetPixel(0, 0);

        map.Dispose();

        return c;
    }
person yazan    schedule 07.04.2014
comment
Все още тествам нещата, за да видя кое ще работи и кое не. Благодаря, ще опитам и това. - person IzzM; 07.04.2014
comment
Защо дублираният код? Просто проверете дали правоъгълникът е празен и ако е така, задайте правоъгълника на екрана към него. След това можете просто да използвате секциите „само правоъгълника“. - person James Coyle; 13.08.2018
comment
@JamesCoyle Благодаря, актуализирах кода. - person yazan; 13.08.2018

Моля, вижте следната справка, мисля, че това е, от което се нуждаете:

http://www.codeproject.com/Articles/24850/Geting-pixel-color-from-screen-shoot-image

person Adel    schedule 07.04.2014