Visual C++: изменяем интенсивности RGB для загруженной в приложение картинки
Небольшая утилитка позволяет отдельно изменить интенсивности красной, зелёной и синей цветовых компонент изображения, код вычисляет новые цвета пикселей на основе значений из трёх "бегунков" TrackBar
, примерно вот так:
if (!pictureBox1->Image) return; Bitmap^ bitmap1 = gcnew Bitmap(pictureBox1->Image); for (int x = 0; x < bitmap1->Width; x++) { for (int y = 0; y < bitmap1->Height; y++) { Color pixelColor = bitmap1->GetPixel(x, y); int R = pixelColor.R + pixelColor.R * trackBar1->Value / 100.; int G = pixelColor.G + pixelColor.G * trackBar2->Value / 100.; int B = pixelColor.B + pixelColor.B * trackBar3->Value / 100.; R = System::Math::Max(R, 0); R = System::Math::Min(R, 255); G = System::Math::Max(G, 0); G = System::Math::Min(G, 255); B = System::Math::Max(B, 0); B = System::Math::Min(B, 255); Color newColor = Color::FromArgb(R,G,B); bitmap1->SetPixel(x, y, newColor); } } pictureBox1->Image = bitmap1;
Можно сбросить рисунок к исходному состоянию и сохранить изменённый рисунок в формате PNG, JPEG или BMP.
Интерфейс построен как обычно в таких случаях на PictureBox, помещённом на Panel. Следует помнить, что стандартный SetPixel в .NET - не самое быстрое решение из возможных.
Вот скриншот приложения в работе, а далее прикреплён проект, написанный на C++/CLI в Visual Studio 2019.
скриншот приложения в работе
Скачать проект C++ Visual Studio 2019 в архиве .zip (8 Кб)
21.10.2020, 14:11 [1369 просмотров]