• 17-02-2020, 22:21:02
    #1
    Hayırlı akşamlar öncelikle . yapmakta olduğum bir uygulama mevcut c# dilinde.
    Programın amacı.
    1-her saniye ekranın fotosunu çekiyor
    2-istediğim bölümü kırpıyor
    3- kırpılan bölümü tarayıp istediğim renk kodu varmı yokmu bunu bana bildiriyor
    Tabi bunları Timer içinde de yapıyor ve aynı anda 50 tane timer çalışıyor. İstediğim gibi sorunsuz çalışıyor benim bilgisayarımda fakat biraz düşük özellikli bilgisarda veya başka bilgisayarda ekrana o renk kodu çıksa dahi çıkmamış gibi görüyor.
    yazmış olduğum kodlar aşağıda bunun haricinde başa kod tavsiysi yada başa önerisi olan varmıdır.

    private Bitmap Screenshot()
    {
    
    Bitmap bmpScreenshot = new Bitmap(Screen.PrimaryScreen.Bounds.Width, Screen.PrimaryScreen.Bounds.Height);
    Graphics g = Graphics.FromImage(bmpScreenshot);
    g.CopyFromScreen(0, 0, 0, 0, Screen.PrimaryScreen.Bounds.Size);
    
    GC.Collect();
    
    return bmpScreenshot;
    }
     private bool find(Bitmap bitmap, int r, int g, int b)
    {
    Color colBitmap = new Color();
    for (int x = 0; x < bitmap.Width; x++)
    {
    for (int y = 0; y < bitmap.Height; y++)
    {
    colBitmap = bitmap.GetPixel(x, y);
    if ((colBitmap.R == r) && (colBitmap.G == g) && (colBitmap.B == b))
    {
    
    
    
    return true;
    
    }
    }
    }
    return false;
    }
     private void timer1_Tick(object sender, EventArgs e)
    {
    
    try
    {
    Bitmap bmp = Screenshot();
    Bitmap crop = bmp.Clone(new Rectangle(102, 553, 8, 10), bmp.PixelFormat);
    
    int red = 53;
    int green = 35;
    int blue = 22;
    
    
    bool ara = find(crop, red, green, blue);
    if (ara == true)
    {
    textBox1.Text = "bulundu";
    }
    }
    catch (FormatException)
    {
    // MessageBox.Show("Bulunamadı");
    }
    GC.Collect();
    
            }
  • 17-02-2020, 22:25:24
    #2
    50 tane Timer olma sebebi nedir?
  • 17-02-2020, 22:28:11
    #3
    orcuntuna adlı üyeden alıntı: mesajı görüntüle
    50 tane Timer olma sebebi nedir?
    ekranda 50 farklı bölge düşünün. her bölgeyi bir timer kontrol ediyor
  • 17-02-2020, 22:29:46
    #4
    O 50 timer yerine iç içe for döngüsü yazabilirsiniz ilk for Y üzerinden bakar ikinci for X ekseni üzerinden bakar.
  • 17-02-2020, 22:31:00
    #5
    kuntakinte adlı üyeden alıntı: mesajı görüntüle
    Hayırlı akşamlar öncelikle . yapmakta olduğum bir uygulama mevcut c# dilinde.
    Programın amacı.
    1-her saniye ekranın fotosunu çekiyor
    2-istediğim bölümü kırpıyor
    3- kırpılan bölümü tarayıp istediğim renk kodu varmı yokmu bunu bana bildiriyor
    Tabi bunları Timer içinde de yapıyor ve aynı anda 50 tane timer çalışıyor. İstediğim gibi sorunsuz çalışıyor benim bilgisayarımda fakat biraz düşük özellikli bilgisarda veya başka bilgisayarda ekrana o renk kodu çıksa dahi çıkmamış gibi görüyor.
    yazmış olduğum kodlar aşağıda bunun haricinde başa kod tavsiysi yada başa önerisi olan varmıdır.

    private Bitmap Screenshot()
    {
    
    Bitmap bmpScreenshot = new Bitmap(Screen.PrimaryScreen.Bounds.Width, Screen.PrimaryScreen.Bounds.Height);
    Graphics g = Graphics.FromImage(bmpScreenshot);
    g.CopyFromScreen(0, 0, 0, 0, Screen.PrimaryScreen.Bounds.Size);
    
    GC.Collect();
    
    return bmpScreenshot;
    }
     private bool find(Bitmap bitmap, int r, int g, int b)
    {
    Color colBitmap = new Color();
    for (int x = 0; x < bitmap.Width; x++)
    {
    for (int y = 0; y < bitmap.Height; y++)
    {
    colBitmap = bitmap.GetPixel(x, y);
    if ((colBitmap.R == r) && (colBitmap.G == g) && (colBitmap.B == b))
    {
    
    
    
    return true;
    
    }
    }
    }
    return false;
    }
     private void timer1_Tick(object sender, EventArgs e)
    {
    
    try
    {
    Bitmap bmp = Screenshot();
    Bitmap crop = bmp.Clone(new Rectangle(102, 553, 8, 10), bmp.PixelFormat);
    
    int red = 53;
    int green = 35;
    int blue = 22;
    
    
    bool ara = find(crop, red, green, blue);
    if (ara == true)
    {
    textBox1.Text = "bulundu";
    }
    }
    catch (FormatException)
    {
    // MessageBox.Show("Bulunamadı");
    }
    GC.Collect();
    
            }
    Windows 10’da özellikle görüntü ayarlarında scale diye bir ayar var onu %100e çekip tekrar deneyin.
  • 17-02-2020, 22:31:44
    #6
    mixerdating adlı üyeden alıntı: mesajı görüntüle
    O 50 timer yerine iç içe for döngüsü yazabilirsiniz ilk for Y üzerinden bakar ikinci for X ekseni üzerinden bakar.
    denedim fakat bu sefer gecikme oluyor. 3 saniye içinde program anlaması gerek
  • 17-02-2020, 22:33:02
    #7
    Derseniz anydesk atın kodları inceleyelim.
  • 17-02-2020, 22:34:17
    #8
    oguzhane adlı üyeden alıntı: mesajı görüntüle
    Windows 10’da özellikle görüntü ayarlarında scale diye bir ayar var onu %100e çekip tekrar deneyin.
    sorun o değil hocam. her bilgisarda çalışabiliyor fakat bağzen algılamıyor. başka kodlar ile programın performas artışı yapmam lazım
  • 17-02-2020, 22:35:25
    #9
    AutoIt Kütüphanesini kullanabilirsiniz. Alternatif olarak.