Beispiel #1
0
        private unsafe List <ZdjecieZPozycją> ZnajdźNoweObszary(bool *c, SiecNeuronowa.ISiećNeuronowa <string> sieć, Size Wielkość)
        {
            List <ZdjecieZPozycją> z = new List <ZdjecieZPozycją>();

            foreach (var item in ZnalezioneObszary)
            {
                if (item.Count > 0)
                {
                    List <ZdjecieZPozycją> Lisr = new List <ZdjecieZPozycją>();

                    foreach (var item2 in item)
                    {
                        ZdjecieZPozycją zpi;
                        if (ObsógaMapyObszarów.TryGetValue(item2.NarKwadratu, out zpi))
                        {
                            Lisr.Add(zpi);
                        }
                    }
                    if (Lisr.Count > 0)
                    {
                        ZdjecieZPozycją zp = new ZdjecieZPozycją();
                        zp.Obszar = DoKwadratów.StwórzKwadratZawierającyWiele(Lisr.ToArray());
                        zp.ObliczPodobieństwo(c, Wielkość.Width, sieć);
                        zp.Moc = Lisr.Sum(x => x.Moc);
                        z.Add(zp);
                    }
                }
            }
            return(z);
        }
        public bool Sąsiedztwo(ZdjecieZPozycją zp)
        {
            int X = Matematyka.Styczność2Obiektów(Obszar.X, Obszar.X + Obszar.Width, zp.Obszar.X, zp.Obszar.X + zp.Obszar.Width);
            int Y = Matematyka.Styczność2Obiektów(Obszar.Y, Obszar.Y + Obszar.Height, zp.Obszar.Y, zp.Obszar.Y + zp.Obszar.Height);

            return(X > NajbliszaOdległośćSąsiada && Y > NajbliszaOdległośćSąsiada);
        }
Beispiel #3
0
        public override unsafe void Znajdź(ZdjecieZPozycją Logo, Linika[] lab2, bool *Binaryn, int DługośćWiersza)
        {
            LinikaWzgledna[] LinikiWzgledne = LinikaWzgledna.PobierzLinikiWzgledne(lab2);
            base.ZnajdźDateLosowania(Logo, LinikiWzgledne, Binaryn);
            float NajlepszyWynik = 0;

            string[] NajlepszyString = null;
            foreach (var item in LinikiWzgledne)
            {
                if (item.Y > Logo.Obszar.Bottom + Logo.Obszar.Height * 0.6 && (item.Y < base.MiejsceDaty()))
                {
                    float Podobieństwo = WynikLotoWzór.PodobieństwoIteracyjne(item, 80, (int)ProstokątNaObrazie.IlośćPikseliSQRT);
                    if (Podobieństwo > MinimalnePodobieństwoWyniku)
                    {
                        item.DopasujProporcje(Binaryn, DługośćWiersza);
                        Numery.Add(item.NajlepszeDopasowanieDoLiniki.UstalOdpowiednie(item, StałeGlobalne.DopuszalneOdalenieOdWzorca, RozpoznawanieKuponu.DzienikZamian, WspółczynikUsunieci));
                    }
                    if (Podobieństwo > NajlepszyWynik)
                    {
                        NajlepszyWynik = Podobieństwo;
                        item.DopasujProporcje(Binaryn, DługośćWiersza);
                        NajlepszyString = item.NajlepszeDopasowanieDoLiniki.UstalOdpowiednie(item, StałeGlobalne.DopuszalneOdalenieOdWzorca, RozpoznawanieKuponu.DzienikZamian, WspółczynikUsunieci);
                    }
                }
            }
            if (Numery.Count == 0)
            {
                Numery.Add(NajlepszyString);
            }
        }
        public static float[,] TablicaWartości(ZdjecieZPozycją z, bool *Obraz, Size RozmarWejścia, Size RozmarWyjścia)
        {
            int y = z.Obszar.Height, x = z.Obszar.Width;
            int Wy = RozmarWyjścia.Height, Wx = RozmarWyjścia.Width;

            float[,] zw        = new float[y, x];
            float[,] Dzielniki = new float[y, x];
            float fy = (Wy - StałaDoConvert) / (y - 1), fx = ((Wx - StałaDoConvert)) / (x - 1);

            bool *Początek           = Obraz + RozmarWejścia.Width * z.Obszar.Y + z.Obszar.X;
            bool *MiejscePrzeglądane = Początek;

            for (int i = 0; i < y; i++)
            {
                for (int j = 0; j < x; j++, MiejscePrzeglądane++)
                {
                    int MiejsceX = (int)(fx * j);
                    int MiejsceY = (int)(fy * i);
                    Dzielniki[MiejsceY, MiejsceX]++;
                    if (*MiejscePrzeglądane)
                    {
                        zw[MiejsceY, MiejsceX]++;
                    }
                }
            }
            for (int i = 0; i < Wy; i++)
            {
                for (int j = 0; j < Wx; j++)
                {
                    zw[i, j] /= Dzielniki[i, j];
                }
            }
            return(zw);
        }
Beispiel #5
0
 private static void WczytajParametry(ZdjecieZPozycją logo)
 {
     if (logo != null)
     {
         ZbytSzeroki      = Convert.ToInt32(logo.Obszar.Width * ProcentLotkaDoRozdzielaniaZLoga);
         ŚredniaSzerokość = Convert.ToInt32(logo.Obszar.Width * SzerokośćOdLoga);
         ŚredniaWysokość  = Convert.ToInt32(logo.Obszar.Height * WysokośćOdLoga);
     }
 }
Beispiel #6
0
 private static void Zapisz(int Zap, FolderBrowserDialog fsb, Bitmap b, ZdjecieZPozycją item)
 {
     if (item.Obszar.X > 0 && item.Obszar.Y > 0 && item.Obszar.X + item.Obszar.Width < b.Width && item.Obszar.Height + item.Obszar.Y < b.Height)
     {
         Bitmap az = b.Clone(item.Obszar, PixelFormat.Format24bppRgb);
         az.Save(fsb.SelectedPath + "\\" + Zap.ToString() + " " + Wyświetl(item.Tag) + ".bmp");
         az.Dispose();
     }
 }
 private void textBox1_TextChanged(object sender, EventArgs e)
 {
     if (listBox1.SelectedIndex >= 0)
     {
         TextBox         tx = (TextBox)sender;
         ZdjecieZPozycją zp = Zaznaczony[listBox1.SelectedIndex];
         zp.Text = tx.Text;
     }
 }
        public static unsafe bool *PobierzObszar(bool *początek, ZdjecieZPozycją ZZP, int x, int y)
        {
            int   Ilość    = 0;
            Point Miejsce  = ZZP.ObiektNaMapie.Miejsce;;
            Size  Rozmar   = ZZP.ObiektNaMapie.Rozmar;
            bool *Zwracana = (bool *)Marshal.AllocHGlobal(Rozmar.Width * Rozmar.Height);

            GrafyShp.Icer.OperacjeNaStrumieniu.Czyść((bool *)Zwracana, Rozmar.Width * Rozmar.Height);
            początek[Miejsce.X + Miejsce.Y * x] = false;
            Stack <Point> Miejsca = new Stack <Point>();

            Miejsca.Push(Miejsce);
            int xn = x - 1, yn = y - 1;
            int MinX = ZZP.ObiektNaMapie.MinX;
            int MinY = ZZP.ObiektNaMapie.MinY;

            while (Miejsca.Count > 0)
            {
                Ilość++;
                Point poz = Miejsca.Pop();
                bool *ml  = początek + x * poz.Y + poz.X;
                Zwracana[Rozmar.Width * (poz.Y - MinY) + (poz.X - MinX)] = true;
                if (poz.X > 0 && ml[-1])
                {
                    ml[-1] = false;
                    Miejsca.Push(new Point()
                    {
                        X = poz.X - 1, Y = poz.Y
                    });
                }
                if (poz.X < xn && ml[1])
                {
                    ml[1] = false;
                    Miejsca.Push(new Point()
                    {
                        X = poz.X + 1, Y = poz.Y
                    });
                }
                if (poz.Y < yn && ml[x])
                {
                    ml[x] = false;
                    Miejsca.Push(new Point()
                    {
                        X = poz.X, Y = poz.Y + 1
                    });
                }
                if (poz.Y > 0 && ml[-x])
                {
                    ml[-x] = false;
                    Miejsca.Push(new Point()
                    {
                        X = poz.X, Y = poz.Y - 1
                    });
                }
            }
            return(Zwracana);
        }
Beispiel #9
0
        public static Linika[] PodzielNaLiniki(ref bool *c, ref Size SamLoto, out ZdjecieZPozycją Logo, bool UżywanieZlepianiaRzutem = false, bool UżywanieRozdzielaniaLiter = true)
        {
            Logo = null;
            int   Długość    = SamLoto.Width * SamLoto.Height;
            bool *ObrazKopis = (bool *)Marshal.AllocHGlobal(Długość);

            OperacjeNaStrumieniu.Kopiuj(ObrazKopis, c, Długość);
            GC.Collect();
            List <ZdjecieZPozycją> ListaZdjęć = new List <ZdjecieZPozycją>();

            ObszaryNaZdzieciaZPozycją(ref c, SamLoto, ObrazKopis, ListaZdjęć, out Logo, UżywanieZlepianiaRzutem);
            Marshal.FreeHGlobal((IntPtr)ObrazKopis);
            Linika[] z = null;
            if (UstalKieróne(ref z, ref c, ref SamLoto, ref Logo))
            {
                return(z);
            }
            if (UżywanieRozdzielaniaLiter)
            {
                RozdzielanieLiter rk = new RozdzielanieLiter(ZbytSzeroki, Sieć);
                rk.Rodzielaj(ListaZdjęć, c, SamLoto, UżywanieZlepianiaRzutem);
            }
            int PrógMimalnejOdległośc = Convert.ToInt32(MaksymalneOdalenie * SamLoto.Width);
            //w tym momencie lotek powinien być w odpowiedniej pozycji

            List <Linika> ZwracanePrzedPrzemianą = PrzydzielanieDoLinik(ListaZdjęć, PrógMimalnejOdległośc);

            ScalajLiniki(ZwracanePrzedPrzemianą);
            ZlepianieLinijek zl = null;

            zl = new ZlepianieLinijek(Sieć);
            zl.ZlepPeknieteLitery(ZwracanePrzedPrzemianą, c, SamLoto.Width);


            ListaZdjęć = Rozczep(ZwracanePrzedPrzemianą);
            UsuńNaPoczątku(SamLoto.Width, ListaZdjęć);
            //PrzypiszPrzesóniecia(ZwracanePrzedPrzemianą);
            //Przesón(ZwracanePrzedPrzemianą);
            ZwracanePrzedPrzemianą = PrzydzielanieDoLinik(ListaZdjęć, PrógMimalnejOdległośc);

            Przesón(ZwracanePrzedPrzemianą);
            ZwracanePrzedPrzemianą = PrzydzielanieDoLinik(ListaZdjęć, PrógMimalnejOdległośc, true);
            UsuńSzumy(ZwracanePrzedPrzemianą);
            ScalajLiniki(ZwracanePrzedPrzemianą, true);
            PosortujY(ZwracanePrzedPrzemianą);
            ZlepianieLiterMetodąY(ZwracanePrzedPrzemianą, SamLoto.Width, c, Sieć);
            ObliczPodobieństwoStworzonychZNeuronową(Sieć, SiećNeuronowa, SamLoto.Width, ZwracanePrzedPrzemianą, c);
            return(ZwracanePrzedPrzemianą.ToArray());

            //return StaryPodziałNaLiniki(SamLoto, ListaZdjęć, sklaerY, TBY);
        }
Beispiel #10
0
        public string[] UstalOdpowiednie(ObszarWzgledny[] ZNalezione, Dictionary <string, int> TabelaZamian)
        {
            int Index = 0;

            string[] zw = new string[ZNalezione.Length];
            foreach (ObszarWzgledny item in CześciLinijek)
            {
                ObszarWzgledny ObszarPrzeglądany = ZNalezione[Index];
                if (ObszarPrzeglądany == null)
                {
                    Index++; continue;
                }
                if (item.SprawdźSybol(ObszarPrzeglądany.Pierwszy()))
                {
                    zw[Index] = ObszarPrzeglądany.Pierwszy();
                }
                else
                {
                    float           NajlepszeDopasowanie = float.MaxValue;
                    string          s  = "";
                    ZdjecieZPozycją Zp = ObszarPrzeglądany.Obszar;
                    if (Zp.TablicaOdległościOdWzorców != null)
                    {
                        foreach (var i in item.Litery)
                        {
                            string item2 = i;
                            if (item2 == null || item2 == "błąd")
                            {
                                continue;
                            }
                            if (item2 == "0")
                            {
                                item2 = "O";
                            }
                            float Wartość = Zp.TablicaOdległościOdWzorców[TabelaZamian[item2]];
                            if (Wartość < NajlepszeDopasowanie)
                            {
                                NajlepszeDopasowanie = Wartość;
                                s = item2;
                            }
                        }
                        if (NajlepszeDopasowanie < DopuszczalnyBłądOdejsciaOdLitery)
                        {
                            zw[Index] = s;
                        }
                    }
                }
                Index++;
            }
            return(zw);
        }
Beispiel #11
0
        private unsafe void SpróbojRozdzielić(ZdjecieZPozycją item, bool *mapa, int szerokość, List <ZdjecieZPozycją> dododania, HashSet <ZdjecieZPozycją> doUsuniecia, bool DziałanieKrytyczne)
        {
            SpróbujWypalić(item, mapa, szerokość);
            if (item.Obszar.Width < 1 || item.Obszar.Height < 1 || item.Obszar.Height > 5000)
            {
                return;
            }
            int[]  ŻutAksonomiczny  = ZlepianieLiterRzutami.PobierzRzutX(mapa, item.Obszar, szerokość);
            int    Miejsce          = 0;
            double Min              = int.MaxValue;
            int    SzerokośćObiektu = item.Obszar.Width;

            for (int i = 0; i < SzerokośćObiektu; i++)
            {
                double x  = ŻutAksonomiczny[i];
                double Zm = i + 0.5f;
                Zm /= SzerokośćObiektu;
                double K = (1 - Zm) * Zm;
                Zm = K * K;
                x /= Zm;
                if (Min > x)
                {
                    Min     = x;
                    Miejsce = i;
                }
            }
            ZdjecieZPozycją a = new ZdjecieZPozycją();

            a.Obszar = new Rectangle(item.Obszar.X, item.Obszar.Y, Miejsce - ZminiejszenieWielkości, item.Obszar.Height);
            //a.ObrazWBool = (bool*)(GrafyShp.Icer.OperacjeNaStrumieniu.KopiujFragment(mapa, new Size(szerokość, 0), a.Obszar));
            a.ObliczPodobieństwo(mapa, szerokość, sieć);
            ZdjecieZPozycją b = new ZdjecieZPozycją();

            b.Obszar = new Rectangle(item.Obszar.X + Miejsce + ZminiejszenieWielkości, item.Obszar.Y, item.Obszar.Width - Miejsce - ZminiejszenieWielkości, item.Obszar.Height);

            b.ObliczPodobieństwo(mapa, szerokość, sieć);
            item.ObliczPodobieństwo(mapa, szerokość, sieć);
            int   IlorazRozmiarów = a.Obszar.Size.WielkoścWPix() * b.Obszar.Size.WielkoścWPix();
            float Współczynik     = ((a.NajbliszePodobieństwo + b.NajbliszePodobieństwo) / 2) / (item.NajbliszePodobieństwo + 0.000001f);

            if (DziałanieKrytyczne)
            {
                Współczynik *= Matematyka.Podobność(item.Obszar.Width, Próg);//podobność zawsze(0,1)
            }
            if ((Współczynik < 1 && IlorazRozmiarów > (ZminiejszenieWielkości * ZminiejszenieWielkości)))
            {
                dododania.Add(a);
                dododania.Add(b);
                doUsuniecia.Add(item);
            }
        }
Beispiel #12
0
        public void Add(ZdjecieZPozycją zp)
        {
            int MaxTmp = zp.Obszar.Y + zp.Obszar.Height;

            if (zp.Obszar.Y < Min)
            {
                Min = zp.Obszar.Y;
            }
            if (MaxTmp > Max)
            {
                Max = MaxTmp;
            }
            ListaZZdjeciami.Add(zp);
        }
Beispiel #13
0
        private unsafe void WyświetlObraz(bool *binarny, Bitmap SamLoto, ZdjecieZPozycją Logo, object o)
        {
            Bitmap          bp = WstepnePrzygotowanie.WskaźnikNaObraz(binarny, SamLoto.Width, SamLoto.Height).Clone(Logo.Obszar, PixelFormat.Format24bppRgb);
            FormatkaObrazka ob = new FormatkaObrazka();

            ob.Obraz = bp;
            if (o is bool)
            {
                ZdjecieLoga = bp;
            }
            else
            {
            }
        }
 private void listBox1_SelectedIndexChanged(object sender, EventArgs e)
 {
     if (listBox1.SelectedIndex >= 0)
     {
         ZdjecieZPozycją zp       = Zaznaczony[listBox1.SelectedIndex];
         Bitmap          obraztmp = zd.Clone(zp.Obszar, PixelFormat.Format24bppRgb);
         pictureBox1.Image = new Bitmap(obraztmp, new Size(pictureBox1.Width, pictureBox1.Height));
         label1.Text       = $"ilość sąsiadów to {zp.IlośćSąsiadów}";
         label2.Text       = "sklejona" + zp.Skeljona.ToString();
         label4.Text       = "Najblisze Podobieństwo " + zp.NajbliszePodobieństwo;
         label3.Text       = "wypełnienie " + zp.Wypełninienie();
         label5.Text       = "zlepione Rzutami" + zp.ZlepionaRzutami;
         textBox1.Text     = Zaznaczony[listBox1.SelectedIndex].Text;
     }
 }
        private void SprawdźLinike(Linika Linika, int szerkość)
        {
            List <ZdjecieZPozycją> MniejszaLista = Linika.ListaZZdjeciami;

            for (int i = 0; i < MniejszaLista.Count; i++)
            {
                for (int j = i + 1; j < MniejszaLista.Count; j++)
                {
                    ZdjecieZPozycją ZMniejsze = MniejszaLista[i], ZWiekszej = MniejszaLista[j];
                    if (ZMniejsze.Sąsiedztwo(ZWiekszej))
                    {
                        Graf.PołączenieDwustrone(Obiekty[ZMniejsze].Pomocniczy, Obiekty[ZWiekszej].Pomocniczy);
                    }
                }
            }
        }
        public ZdjecieZPozycją PobierzZdjecie(List <int> Zloczone)
        {
            ListaZPorównywaniem <int> l = new ListaZPorównywaniem <int>(Zloczone);

            if (DzienikZnalezionych.ContainsKey(l))
            {
                return(DzienikZnalezionych[l]);
            }
            else
            {
                ZdjecieZPozycją z = new ZdjecieZPozycją();
                z.Obszar   = DoKwadratów.StwórzKwadratZawierającyWiele(PobierzZdjeciaPoIndeksach(Zloczone));
                z.Skeljona = Zloczone.Count > 1;
                z.ObliczPodobieństwo(Obraz, Szerokośc, Sieć);
                DzienikZnalezionych.Add(l, z);
                return(z);
            }
        }
Beispiel #17
0
        private static float ObliczLogowatość(ZdjecieZPozycją z)
        {
            float X = z.Obszar.Width, Y = z.Obszar.Height;
            float zw = X * Y;
            float Min, Max;

            if (X < Y)
            {
                Min = X;
                Max = Y;
            }
            else
            {
                Min = Y;
                Max = X;
            }
            zw *= Min / Max;

            zw *= Matematyka.Podobność(WypełnienieLoga, z.Wypełninienie()) * Matematyka.Podobność(z.Obszar.Size.WielkoścWPix(), SkalerLoga);
            return(zw);
        }
Beispiel #18
0
        private static List <Linika> PrzydzielanieDoLinik(List <ZdjecieZPozycją> ListaZdjęć, int PrógMimalnejOdległośc, bool PodobieństwoInterpolowane = false)
        {
            ListaZdjęć.Sort(new DoKwadratów.SortowanieWzgledemX());
            List <Linika> ZwracanePrzedPrzemianą = new List <Linika>();

            foreach (var item in ListaZdjęć)
            {
                int   Index = -1;
                float NajbardziejPodobny = float.MinValue;
                for (int i = 0; i < ZwracanePrzedPrzemianą.Count; i++)
                {
                    ZdjecieZPozycją Ostanij      = ZwracanePrzedPrzemianą[i].Last();
                    float           Podobieństwo = 0;
                    if (PodobieństwoInterpolowane)
                    {
                        Podobieństwo = Matematyka.PodobieństwoYProstokontów(Ostanij.ObszarInterpolowany, item.ObszarInterpolowany);
                    }
                    else
                    {
                        Podobieństwo = Matematyka.PodobieństwoYProstokontów(Ostanij.Obszar, item.Obszar);
                    }
                    if (Podobieństwo > NajbardziejPodobny && item.Obszar.X - Ostanij.Obszar.X < PrógMimalnejOdległośc)
                    {
                        Index = i;
                        NajbardziejPodobny = Podobieństwo;
                    }
                }
                if (NajbardziejPodobny > MinimalnePodobieństwo)
                {
                    ZwracanePrzedPrzemianą[Index].Add(item);
                }
                else
                {
                    ZwracanePrzedPrzemianą.Add(new Linika());
                    ZwracanePrzedPrzemianą.Last().Add(item);
                }
            }

            return(ZwracanePrzedPrzemianą);
        }
Beispiel #19
0
        private static void ObszaryNaZdzieciaZPozycją(ref bool *c, Size SamLoto, bool *ObrazKopis, List <ZdjecieZPozycją> ListaZdjęć, out ZdjecieZPozycją Logo, bool UżywajZlepianiaRzutem)
        {
            Logo = null;
            int * MapaSpójnychObszarów;
            float NajbardzjeLogowaty = 0;

            List <WstepnePrzygotowanie.ObiektNaMapie> Obszary = WstepnePrzygotowanie.ZnajdźOpszary(ref c, SamLoto.Width, SamLoto.Height, out MapaSpójnychObszarów);

            foreach (var item in Obszary)
            {
                Rectangle       rl = new Rectangle(item.MinX, item.MinY, item.MaxX - item.MinX + 1, item.MaxY - item.MinY + 1);
                ZdjecieZPozycją z  = new ZdjecieZPozycją();
                z.Obszar        = rl;
                z.Moc           = item.Moc;
                z.ObiektNaMapie = item;
                z.ObliczPodobieństwo(c, SamLoto.Width, Sieć);
                //usóń w dalszej fazie i Usń też Kopie
                z.ObrazWBool = WstepnePrzygotowanie.PobierzObszar(ObrazKopis, z, SamLoto.Width, SamLoto.Height);
                if (SprawdźPoprawne(item))
                {
                    ListaZdjęć.Add(z);
                }
                float Logowatość = ObliczLogowatość(z);
                if (Logowatość > NajbardzjeLogowaty)
                {
                    NajbardzjeLogowaty = Logowatość;
                    Logo = z;
                }
            }
            WczytajParametry(Logo);
            if (UżywajZlepianiaRzutem)
            {
                ZlepianieLiterRzutami zlk = new ZlepianieLiterRzutami(ŚredniaSzerokość, ŚredniaWysokość);
                zlk.Zlepiaj(MapaSpójnychObszarów, Sieć, SamLoto, c, ListaZdjęć);
            }


            Marshal.FreeHGlobal((IntPtr)MapaSpójnychObszarów);
        }
Beispiel #20
0
        public void Scal()
        {
            List <ZdjecieZPozycją>    DoDodania   = new List <ZdjecieZPozycją>();
            HashSet <ZdjecieZPozycją> DoUsuniecia = new HashSet <ZdjecieZPozycją>();

            while (w.Count != 0)
            {
                WystepująceWTymSamymMiejscu ostatni = w.Last();
                if (ostatni.Count == 1)
                {
                    w.RemoveAt(w.Count - 1);
                    continue;
                }

                ZdjecieZPozycją z = new ZdjecieZPozycją();
                z.Obszar = DoKwadratów.StwórzKwadratZawierającyWiele(ostatni.ToArray());
                z.ObszarInterpolowany = DoKwadratów.StwórzKwadratZawierającyWieleRec(WeźInterpolowany(ostatni));
                z.Skeljona            = true;
                z.ObliczPodobieństwo(Obraz, Szerokość, sieć);
                if (PrógDoUsuniecia + z.NajbliszePodobieństwo < ostatni.Podobność)
                {
                    foreach (var item in ostatni)
                    {
                        DoUsuniecia.Add(item);
                    }
                    w.RemoveAll(X => X.Kolizja(ostatni));
                    DoDodania.Add(z);
                }
                else
                {
                    w.RemoveAt(w.Count - 1);
                }
            }

            LinikaZmieniana.ListaZZdjeciami.RemoveAll(X => DoUsuniecia.Contains(X));
            LinikaZmieniana.ListaZZdjeciami.AddRange(DoDodania);
            LinikaZmieniana.ListaZZdjeciami.Sort(new DoKwadratów.SortowanieWzgledemX());
        }
Beispiel #21
0
 private unsafe void SpróbujWypalić(ZdjecieZPozycją item, bool *mapa, int szerokość)
 {
     if (item.Wypełninienie() > PrógWypalania)
     {
         for (int i = 0; i < IlośćWypaleńPoPrzekroczeniuProgu; i++)
         {
             item.Moc -= Wypełnienie(szerokość, item.Obszar, mapa);
         }
         item.Obszar.X      += 2;
         item.Obszar.Y      += 2;
         item.Obszar.Width  -= 4;
         item.Obszar.Height -= 4;
         int I = 0;
         while (item.Wypełninienie() > PrógWypalania && I++ < IlośćMaksWYpaleń)
         {
             item.Moc           -= Wypełnienie(szerokość, item.Obszar, mapa);
             item.Obszar.X      += 1;
             item.Obszar.Y      += 1;
             item.Obszar.Width  -= 2;
             item.Obszar.Height -= 2;
         }
         item.Obszar = ZnajdźZmienszenia(item.Obszar, szerokość, mapa);
     }
 }
Beispiel #22
0
 public override unsafe void Znajdź(ZdjecieZPozycją Logo, Linika[] lab2, bool *Binaryn, int DługośćWiersza)
 {
 }
 public static float[,] TablicaWartości(ZdjecieZPozycją z, int SzerokośćWejścia, bool *Obraz, Size RozmarWyjścia)
 {
     return(TablicaWartości(z.Obszar, SzerokośćWejścia, Obraz, RozmarWyjścia));
 }
Beispiel #24
0
        private static bool UstalKieróne(ref Linika[] z, ref bool *c, ref Size samLoto, ref ZdjecieZPozycją logo)
        {
            Point Sierodek  = new Point(samLoto.Width, samLoto.Height).Razy(0.5f);
            Point WielkoścL = new Point(logo.Obszar.Width, logo.Obszar.Height).Razy(0.5f);

            Sierodek = logo.Obszar.Location.Dodaj(WielkoścL).Odejmij(Sierodek);
            double XDoY = samLoto.Width; XDoY /= samLoto.Height;
            double d    = (Math.PI + Math.Atan2(Sierodek.X, Sierodek.Y * XDoY));
            double Pi4  = Math.PI / 4;
            double Pi2  = Math.PI / 2;

            if (d < Pi4 || d > (Math.PI * 2) - Pi4)
            {
                WykonanyObrót = RodzajObrotu.Brak;
                return(false);
            }
            else if (d < Pi2 + Pi4)
            {
                WykonanyObrót = RodzajObrotu.ObrótPlus90;
                OperacjeNaStrumieniu.ObrótPlus90((byte *)c, ref samLoto);
            }
            else if (d < Pi4 + 2 * Pi2)
            {
                WykonanyObrót = RodzajObrotu.Obrót180;
                OperacjeNaStrumieniu.Obrót180((byte *)c, samLoto);
            }
            else if (d < Pi4 + 3 * Pi2)
            {
                WykonanyObrót = RodzajObrotu.obrótMin90;
                OperacjeNaStrumieniu.ObrótMin90((byte *)c, ref samLoto);
            }
            else
            {
                throw new NotImplementedException("coś poszło nie tak ");
            }
            z = PodzielNaLiniki(ref c, ref samLoto, out logo);
            return(true);
        }