ея реалізації даної програми і фільтра, так як ми маємо можливість оперувати даними масиву за коштами властивостей, подій, функцій і команд. p align="justify"> Код, який здійснює можливість роботи і відкриття зображення:
OpenFileDialog ^ openFileDialog1 = gcnew OpenFileDialog; -> InitialDirectory = "c: "; -> Filter = "All files (*. *) | *. * "; -> RestoreDirectory = true; (openFileDialog1-> ShowDialog () == System :: Windows :: Forms :: DialogResult :: OK)
{((myStream = openFileDialog1-> OpenFile ())! = nullptr)
{= gcnew Bitmap (myStream, true); -> Image = image1;
}
} = gcnew Bitmap (myStream, true); rect = Rectangle (0,0, image1-> Width, image1-> Height); :: Drawing :: Imaging :: BitmapData ^ bmpData = image1-> LockBits (rect, System :: Drawing :: Imaging :: ImageLockMode :: ReadWrite, image1-> PixelFormatbytes = bmpData-> Stride * image1-> Height; ^ msv = gcnew array < ; Byte> (bytes); ^ msc = gcnew array (bytes); ptr = bmpData-> Scan0; :: Runtime :: InteropServices :: Marshal :: Copy (ptr, msv, 0, msv-> Length); :: Runtime :: InteropServices :: Marshal :: Copy (ptr, msc, 0, msc-> Length);
Природно, слід пам'ятати, що для чорно-білого і кольорового зображення при однаковій кількості пікселів масиви даних будуть відрізнятися. Пояснюється це тим, що кожен одиночний піксель складається з трьох під-пікселів, кожен з яких здатний відображати 255 відтінків кольору, тому масив значень рівня кольору для кольорового зображення буде в 3 рази більше. p align="justify"> Отже, відкривши зображення, воно візуалізується у спеціальному елементі посредствам прописаного коду. Так само машина зберігає в оперативній пам'яті масив, необхідно знайти в ньому "биті пікселі", використовуючи виявлені при аналізі властивості. У загальному випадку це здійснюється наступним чином: подвійний цикл забезпечує прохід по "стовпцях" зображення, знаходячи в кожному одиночні "биті пікселі" або їх послідовність (підряд йдуть). (Рис.4). br/>В
Рис. 4. Принцип роботи циклів
Цикл, що забезпечує прохід по стовпцях, в загальному вигляді виглядає таким чином:
(int j = 0; j Width; j + +)
{pix = j; (int i = 0; i Height; i + +)
{
... [pix + i * bmpData-> Stride]
...
}
}
Не дивлячись на те, що значення рівня кольору зберігаються в одновимірному масиві даних, використовуючи вищевказаний цикл і функцію bmpData-> Stride (перехід на піксель стоїть "нижче") з'являється можливість знаходити "биті пікселі" ;, які в разі присутності їх на знімку, представляються вертикальній або горизонтальній лінією (послідовністю), або поодиноки...