/// <summary>
        /// Zdarzenie ładowania obrazu z pliku do zmiennej przechowującej bitmapę.
        /// </summary>
        private void LoadButton_OnClick(object sender, RoutedEventArgs e)
        {
            bmp        = null;
            img.Source = null;

            if (File.Exists(model.SciezkaPliku))
            {
                bmp = new Bitmap(model.SciezkaPliku);

                // konwersja formatu pikseli na 32argb w przypadku innego formatu tychże
                if (!bmp.PixelFormat.Equals(PixelFormat.Format32bppArgb))
                {
                    bmp = Konwerter.ZmianaFormatuPikseli(bmp);
                }
                img.Source           = Konwerter.KonwertujBitmapeNaObraz(bmp);
                model.KonwertAktywny = true;
            }
            else
            {
                MessageBox.Show("Nie wskazano pliku.", "Error", MessageBoxButton.OK, MessageBoxImage.Error);
            }
        }
        /// <summary>
        /// Zdarzenie konwersji grafiki.
        /// </summary>
        private void ConvertButton_OnClick(object sender, RoutedEventArgs e)
        {
            if (bmp == null)
            {
                MessageBox.Show("Proszę najpierw załadować plik graficzny.", "ERROR", MessageBoxButton.OK, MessageBoxImage.Error);
                return;
            }

            model.CzyAktywny     = false;
            model.KonwertAktywny = false;
            Stopwatch     stopWatch = new Stopwatch();
            List <Thread> threads   = new List <Thread>();

            byte[] rgbValues = Konwerter.KonwertujBitmapeDoTablicy(bitmap: bmp);

            int pixels = (rgbValues.Length / 4);    // ilość pikseli

            if (model.Watki > pixels)
            {
                model.Watki = (short)(pixels);
                MessageBox.Show("Przekroczono bezpieczną liczbę wątków dla zbyt małego obrazka. Ustawiono optymalną liczbę wątków: " + model.Watki,
                                "Info", MessageBoxButton.OK, MessageBoxImage.Asterisk);
            }

            int rest   = pixels % model.Watki;              // ostatnie piksele obrazka do przejęcia przez ostatni wątek
            int length = (pixels - rest) / model.Watki * 4; // ilość elementów tablicy do przerobienia przez pojedynczy wątek


            int counter = 0;

            for (int j = 0; j < model.Watki - 1; j++)
            {
                int begin = counter;
                int end   = counter + length;
                if (model.CsharpOK)
                {
                    threads.Add(new Thread(() => Konwerter_C.ConvertToSepia(rgbValues, begin, end, model.Sepia)));
                }
                else
                {
                    threads.Add(new Thread(() => Konwerter_ASM.ConvertToSepia(rgbValues, begin, end, model.Sepia)));
                }
                counter += length;
            }

            if (model.CsharpOK)
            {
                threads.Add(new Thread(() => Konwerter_C.ConvertToSepia(rgbValues, counter, rgbValues.Length, model.Sepia)));
            }
            else
            {
                threads.Add(new Thread(() => Konwerter_ASM.ConvertToSepia(rgbValues, counter, rgbValues.Length, model.Sepia)));
            }

            // mierzenie czasu wykonania pracy wątku/ów
            stopWatch.Start();
            threads.ForEach(thread => thread.Start());
            threads.ForEach(thread => thread.Join());
            stopWatch.Stop();

            StatusBarTextBlock.Text = String.Format("Przekonwertowano w {0} ms", stopWatch.Elapsed.Milliseconds);
            stopWatch.Reset();

            bmp = Konwerter.KonwertujTabliceNaBitmape(bitmap: bmp, rgbValues: rgbValues);

            //wyświetlenie przekonwertowanego obrazu w interfejsie
            img.Source       = Konwerter.KonwertujBitmapeNaObraz(bmp);
            model.CzyAktywny = true;
        }