c# resim bul ve tıkla

TrOwX

Katılımcı Üye
29 Tem 2017
276
0
Trabzon/TR

Tcspy

Uzman üye
5 Eki 2019
1,034
103
TC

Tcspy

Uzman üye
5 Eki 2019
1,034
103
TC
sorun devam ediyor

c# image finder arıyorum kod veya fremwork önerecek var mı python değil c# koca projeyi pythona nasıl çevireyim bir yol olması gerekiyor koskoca yazılım dili c# düşünmüşlerdir macro recoder nasıl yazılıyor jitbit
 

gikaa123

Kıdemli Üye
26 Haz 2012
2,605
61
c# image finder arıyorum kod veya fremwork önerecek var mı python değil c# koca projeyi pythona nasıl çevireyim bir yol olması gerekiyor koskoca yazılım dili c# düşünmüşlerdir macro recoder nasıl yazılıyor jitbit
Şu yazdıklarını google amcaya yazsan , karşına çıkan birsürü örnekten birini seçip yazmaya başlasan ve hata aldığın yer olursa bize danışsan cevaplasak çok daha kolay olur gibi.
 

Tcspy

Uzman üye
5 Eki 2019
1,034
103
TC
Şu yazdıklarını google amcaya yazsan , karşına çıkan birsürü örnekten birini seçip yazmaya başlasan ve hata aldığın yer olursa bize danışsan cevaplasak çok daha kolay olur gibi.
private void Form2_Load(object sender, EventArgs e)
{

Rectangle rect = FindImageOnScreen(ImgToFind, false);

if (rect != Rectangle.Empty)//Image Foud
{
//Point cntr = new Point(rect.X + System.Convert.ToInt32(rect.Width / (double)2), rect.Y + System.Convert.ToInt32(rect.Height / (double)2));
//Cursor.Position = cntr;

MessageBox.Show(rect.ToString());

}
else
MessageBox.Show("Image not found");

}


FindImageOnScreen yok hadi bakalım açıkla hangi using kütüpanesi sanki bakmıyorum
 

gikaa123

Kıdemli Üye
26 Haz 2012
2,605
61
private void Form2_Load(object sender, EventArgs e)
{

Rectangle rect = FindImageOnScreen(ImgToFind, false);

if (rect != Rectangle.Empty)//Image Foud
{
//Point cntr = new Point(rect.X + System.Convert.ToInt32(rect.Width / (double)2), rect.Y + System.Convert.ToInt32(rect.Height / (double)2));
//Cursor.Position = cntr;

MessageBox.Show(rect.ToString());

}
else
MessageBox.Show("Image not found");

}


FindImageOnScreen yok hadi bakalım açıkla hangi using kütüpanesi sanki bakmıyorum
USİNG ifadesi ile eklediğimiz bir KÜTÜPHANE değil , parametreli bir METHOD olduğunu düşünüyorum. Methodu yazmadığın için de yok. copy+paste yaptığın siteyi bi atar mısın ? bir de kod olarak değil de kullandığın ide'de ekran görüntüsü alıp atarsan daha rahat anlaşılır.
 
Son düzenleme:

Tcspy

Uzman üye
5 Eki 2019
1,034
103
TC

gikaa123

Kıdemli Üye
26 Haz 2012
2,605
61
Sitede belirttiğin alandaki kodun tamamı bu şekilde. Biraz daha kurcalayabilirsiniz, sanırım en son postta arkadaş çözümü paylaşmış. Forumda müsait olan biri yardım edecektir, yarın çözülmüş olmaz ise ben de araştırır yardımcı olurum.

C#:
      using System.Drawing;
      using System.Drawing.Imaging;
      using System.Runtime.InteropServices; 

        private Bitmap ImgToFind = new Bitmap(@"C:\bitmaps\find image.png");
        private Bitmap ScreenBmp = new Bitmap(@"c:\bitmaps\find image screen.png");
      
       private void Form1_Load(object sender, EventArgs e)
        {

            Rectangle rect = FindImageOnScreen(ImgToFind, false);

            if (rect != Rectangle.Empty)//Image Foud
            {
                //Point cntr = new Point(rect.X + System.Convert.ToInt32(rect.Width / (double)2), rect.Y + System.Convert.ToInt32(rect.Height / (double)2));
                //Cursor.Position = cntr;

                MessageBox.Show(rect.ToString());

            }
            else
                MessageBox.Show("Image not found");
        }

        /// <summary>Finds a matching image on the screen.</summary>

        ///     ''' <param name="bmpMatch">The image to find on the screen.</param>

        ///     ''' <param name="ExactMatch">True finds an exact match (slowerer on large images). False finds a close match (faster on large images).</param>

        ///     ''' <returns>Returns a Rectangle of the found image in sceen coordinates.</returns>
        private Rectangle FindImageOnScreen(Bitmap bmpMatch, bool ExactMatch)
        {

            BitmapData ImgBmd = bmpMatch.LockBits(new Rectangle(0, 0, bmpMatch.Width, bmpMatch.Height), ImageLockMode.ReadOnly, PixelFormat.Format24bppRgb);
            BitmapData ScreenBmd = ScreenBmp.LockBits(new Rectangle(0, 0, ScreenBmp.Width, ScreenBmp.Height), ImageLockMode.ReadOnly, PixelFormat.Format24bppRgb);

            byte[] ImgByts = new byte[(Math.Abs(ImgBmd.Stride) * bmpMatch.Height) - 1 + 1];
            byte[] ScreenByts = new byte[(Math.Abs(ScreenBmd.Stride) * ScreenBmp.Height) - 1 + 1];

            Marshal.Copy(ImgBmd.Scan0, ImgByts, 0, ImgByts.Length);
            Marshal.Copy(ScreenBmd.Scan0, ScreenByts, 0, ScreenByts.Length);

            bool FoundMatch = false;
            Rectangle rct = Rectangle.Empty;
            int sindx, iindx;
            int spc, ipc;

            int skpx = System.Convert.ToInt32((bmpMatch.Width - 1) / (double)10);
            if (skpx < 1 | ExactMatch)
                skpx = 1;
            int skpy = System.Convert.ToInt32((bmpMatch.Height - 1) / (double)10);
            if (skpy < 1 | ExactMatch)
                skpy = 1;

            for (int si = 0; si <= ScreenByts.Length - 1; si += 3)
            {
                FoundMatch = true;
                for (int iy = 0; iy <= ImgBmd.Height - 1; iy += skpy)
                {
                    for (int ix = 0; ix <= ImgBmd.Width - 1; ix += skpx)
                    {
                        sindx = (iy * ScreenBmd.Stride) + (ix * 3) + si;
                        iindx = (iy * ImgBmd.Stride) + (ix * 3);
                        spc = Color.FromArgb(ScreenByts[sindx + 2], ScreenByts[sindx + 1], ScreenByts[sindx]).ToArgb();
                        ipc = Color.FromArgb(ImgByts[iindx + 2], ImgByts[iindx + 1], ImgByts[iindx]).ToArgb();
                        if (spc != ipc)
                        {
                            FoundMatch = false;
                            iy = ImgBmd.Height - 1;
                            ix = ImgBmd.Width - 1;
                        }
                    }
                }
                if (FoundMatch)
                {
                    double r = si / (double)(ScreenBmp.Width * 3);
                    double c = ScreenBmp.Width * (r % 1);
                    if (r % 1 >= 0.5)
                        r -= 1;
                    rct.X = System.Convert.ToInt32(c);
                    rct.Y = System.Convert.ToInt32(r);
                    rct.Width = bmpMatch.Width;
                    rct.Height = bmpMatch.Height;
                    break;
                }
            }

            bmpMatch.UnlockBits(ImgBmd);
            ScreenBmp.UnlockBits(ScreenBmd);
            //ScreenBmp.Dispose();
            return rct;
        }
 

Tcspy

Uzman üye
5 Eki 2019
1,034
103
TC
malesef kodu yazamadım yardımcı olacak var mı?

yardımcı olacak aynı kişiler konu açıp durmayın cevap yok siz konu açıyorsunuz bizim konular 2 sayfaya düşüyor
 
Son düzenleme:
Ş

Şenol ÇETİN

Ziyaretçi
kod dogru sekilde çalısıyor ekleyen arkadasa tesekkürler

C#:
namespace resimtıklama

{
    using System.Drawing;
    using System.Drawing.Imaging;
    using System.Runtime.InteropServices;

    public partial class Form1 : Form
    {
        private Bitmap ImgToFind = new Bitmap(@"C:\bitmaps\find\image.png");
        private Bitmap ScreenBmp = new Bitmap(@"c:\bitmaps\find\imagescreen.png");
        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            Rectangle rect = FindImageOnScreen(ImgToFind, false);

            if (rect != Rectangle.Empty)//Image Foud
            {
                //Point cntr = new Point(rect.X + System.Convert.ToInt32(rect.Width / (double)2), rect.Y + System.Convert.ToInt32(rect.Height / (double)2));
                //Cursor.Position = cntr;

                MessageBox.Show(rect.ToString());

            }
            else
                MessageBox.Show("Image not found");
        }
        private Rectangle FindImageOnScreen(Bitmap bmpMatch, bool ExactMatch)
        {

            BitmapData ImgBmd = bmpMatch.LockBits(new Rectangle(0, 0, bmpMatch.Width, bmpMatch.Height), ImageLockMode.ReadOnly, PixelFormat.Format24bppRgb);
            BitmapData ScreenBmd = ScreenBmp.LockBits(new Rectangle(0, 0, ScreenBmp.Width, ScreenBmp.Height), ImageLockMode.ReadOnly, PixelFormat.Format24bppRgb);

            byte[] ImgByts = new byte[(Math.Abs(ImgBmd.Stride) * bmpMatch.Height) - 1 + 1];
            byte[] ScreenByts = new byte[(Math.Abs(ScreenBmd.Stride) * ScreenBmp.Height) - 1 + 1];

            Marshal.Copy(ImgBmd.Scan0, ImgByts, 0, ImgByts.Length);
            Marshal.Copy(ScreenBmd.Scan0, ScreenByts, 0, ScreenByts.Length);

            bool FoundMatch = false;
            Rectangle rct = Rectangle.Empty;
            int sindx, iindx;
            int spc, ipc;

            int skpx = System.Convert.ToInt32((bmpMatch.Width - 1) / (double)10);
            if (skpx < 1 | ExactMatch)
                skpx = 1;
            int skpy = System.Convert.ToInt32((bmpMatch.Height - 1) / (double)10);
            if (skpy < 1 | ExactMatch)
                skpy = 1;

            for (int si = 0; si <= ScreenByts.Length - 1; si += 3)
            {
                FoundMatch = true;
                for (int iy = 0; iy <= ImgBmd.Height - 1; iy += skpy)
                {
                    for (int ix = 0; ix <= ImgBmd.Width - 1; ix += skpx)
                    {
                        sindx = (iy * ScreenBmd.Stride) + (ix * 3) + si;
                        iindx = (iy * ImgBmd.Stride) + (ix * 3);
                        spc = Color.FromArgb(ScreenByts[sindx + 2], ScreenByts[sindx + 1], ScreenByts[sindx]).ToArgb();
                        ipc = Color.FromArgb(ImgByts[iindx + 2], ImgByts[iindx + 1], ImgByts[iindx]).ToArgb();
                        if (spc != ipc)
                        {
                            FoundMatch = false;
                            iy = ImgBmd.Height - 1;
                            ix = ImgBmd.Width - 1;
                        }
                    }
                }
                if (FoundMatch)
                {
                    double r = si / (double)(ScreenBmp.Width * 3);
                    double c = ScreenBmp.Width * (r % 1);
                    if (r % 1 >= 0.5)
                        r -= 1;
                    rct.X = System.Convert.ToInt32(c);
                    rct.Y = System.Convert.ToInt32(r);
                    rct.Width = bmpMatch.Width;
                    rct.Height = bmpMatch.Height;
                    break;
                }
            }

            bmpMatch.UnlockBits(ImgBmd);
            ScreenBmp.UnlockBits(ScreenBmd);
            //ScreenBmp.Dispose();
            return rct;
        }
    }
}


Yerel disk c içine bitmap klasörü onunda altına find klasörü açılıp; bulunmak istenen resmin adı image.png, aranacak olan resmin adı imagescreen.png olarak ayarlanmalı. Program aranan resmin koordinatlarını tam olarak vermektedir.
 

Tcspy

Uzman üye
5 Eki 2019
1,034
103
TC
C#:
namespace resimtıklama

{
    using System.Drawing;
    using System.Drawing.Imaging;
    using System.Runtime.InteropServices;

    public partial class Form1 : Form
    {
        private Bitmap ImgToFind = new Bitmap(@"C:\bitmaps\find\image.png");
        private Bitmap ScreenBmp = new Bitmap(@"c:\bitmaps\find\imagescreen.png");
        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            Rectangle rect = FindImageOnScreen(ImgToFind, false);

            if (rect != Rectangle.Empty)//Image Foud
            {
                //Point cntr = new Point(rect.X + System.Convert.ToInt32(rect.Width / (double)2), rect.Y + System.Convert.ToInt32(rect.Height / (double)2));
                //Cursor.Position = cntr;

                MessageBox.Show(rect.ToString());

            }
            else
                MessageBox.Show("Image not found");
        }
        private Rectangle FindImageOnScreen(Bitmap bmpMatch, bool ExactMatch)
        {

            BitmapData ImgBmd = bmpMatch.LockBits(new Rectangle(0, 0, bmpMatch.Width, bmpMatch.Height), ImageLockMode.ReadOnly, PixelFormat.Format24bppRgb);
            BitmapData ScreenBmd = ScreenBmp.LockBits(new Rectangle(0, 0, ScreenBmp.Width, ScreenBmp.Height), ImageLockMode.ReadOnly, PixelFormat.Format24bppRgb);

            byte[] ImgByts = new byte[(Math.Abs(ImgBmd.Stride) * bmpMatch.Height) - 1 + 1];
            byte[] ScreenByts = new byte[(Math.Abs(ScreenBmd.Stride) * ScreenBmp.Height) - 1 + 1];

            Marshal.Copy(ImgBmd.Scan0, ImgByts, 0, ImgByts.Length);
            Marshal.Copy(ScreenBmd.Scan0, ScreenByts, 0, ScreenByts.Length);

            bool FoundMatch = false;
            Rectangle rct = Rectangle.Empty;
            int sindx, iindx;
            int spc, ipc;

            int skpx = System.Convert.ToInt32((bmpMatch.Width - 1) / (double)10);
            if (skpx < 1 | ExactMatch)
                skpx = 1;
            int skpy = System.Convert.ToInt32((bmpMatch.Height - 1) / (double)10);
            if (skpy < 1 | ExactMatch)
                skpy = 1;

            for (int si = 0; si <= ScreenByts.Length - 1; si += 3)
            {
                FoundMatch = true;
                for (int iy = 0; iy <= ImgBmd.Height - 1; iy += skpy)
                {
                    for (int ix = 0; ix <= ImgBmd.Width - 1; ix += skpx)
                    {
                        sindx = (iy * ScreenBmd.Stride) + (ix * 3) + si;
                        iindx = (iy * ImgBmd.Stride) + (ix * 3);
                        spc = Color.FromArgb(ScreenByts[sindx + 2], ScreenByts[sindx + 1], ScreenByts[sindx]).ToArgb();
                        ipc = Color.FromArgb(ImgByts[iindx + 2], ImgByts[iindx + 1], ImgByts[iindx]).ToArgb();
                        if (spc != ipc)
                        {
                            FoundMatch = false;
                            iy = ImgBmd.Height - 1;
                            ix = ImgBmd.Width - 1;
                        }
                    }
                }
                if (FoundMatch)
                {
                    double r = si / (double)(ScreenBmp.Width * 3);
                    double c = ScreenBmp.Width * (r % 1);
                    if (r % 1 >= 0.5)
                        r -= 1;
                    rct.X = System.Convert.ToInt32(c);
                    rct.Y = System.Convert.ToInt32(r);
                    rct.Width = bmpMatch.Width;
                    rct.Height = bmpMatch.Height;
                    break;
                }
            }

            bmpMatch.UnlockBits(ImgBmd);
            ScreenBmp.UnlockBits(ScreenBmd);
            //ScreenBmp.Dispose();
            return rct;
        }
    }
}


Yerel disk c içine bitmap klasörü onunda altına find klasörü açılıp; bulunmak istenen resmin adı image.png, aranacak olan resmin adı imagescreen.png olarak ayarlanmalı. Program aranan resmin koordinatlarını tam olarak vermektedir.
bu konuyu açtığımı ben unuttum proje yok artık :D
 
Üst

Turkhackteam.org internet sitesi 5651 sayılı kanun’un 2. maddesinin 1. fıkrasının m) bendi ile aynı kanunun 5. maddesi kapsamında "Yer Sağlayıcı" konumundadır. İçerikler ön onay olmaksızın tamamen kullanıcılar tarafından oluşturulmaktadır. Turkhackteam.org; Yer sağlayıcı olarak, kullanıcılar tarafından oluşturulan içeriği ya da hukuka aykırı paylaşımı kontrol etmekle ya da araştırmakla yükümlü değildir. Türkhackteam saldırı timleri Türk sitelerine hiçbir zararlı faaliyette bulunmaz. Türkhackteam üyelerinin yaptığı bireysel hack faaliyetlerinden Türkhackteam sorumlu değildir. Sitelerinize Türkhackteam ismi kullanılarak hack faaliyetinde bulunulursa, site-sunucu erişim loglarından bu faaliyeti gerçekleştiren ip adresini tespit edip diğer kanıtlarla birlikte savcılığa suç duyurusunda bulununuz.