Форум программистов, компьютерный форум, киберфорум
C++ Qt
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.51/41: Рейтинг темы: голосов - 41, средняя оценка - 4.51
-23 / 0 / 2
Регистрация: 15.03.2013
Сообщений: 328

Компоненты пикселя

12.04.2014, 06:02. Показов 9008. Ответов 32
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый день! Мне понадобилось получить массив пикселей изображения .bmp.
Полазил в справке Qt Creator, нашёл вот такой вот способ:
C++ (Qt)
1
 QVector<QRgb> QImage::colorTable () const.
Создал вектор и вызвал этот метод, но когда я беру компоненту синего, например, так
C++ (Qt)
1
int a = qBlue(*it);
, то почему то не у всех пикселей она есть, выводится 0, хотя изображение почти всё голубое.(также и для других компонент)
Что может быть не так?
пробывал для проверки считывания изображения сделать так:
сначала считываю
C++ (Qt)
1
QImage img2(fileName);
потом присваиваю:
C++ (Qt)
1
QImage img = img2;
потом сохраняю:
C++ (Qt)
1
img.save(fileName, "BMP");
всё робит, изображение точно такое же получается -> проблема неправильного считывания изображения отпадает.
Вот не нашёл метод проверить правильность получения вектора, может подскажете метод как из вектора QRgb сделать объект типа QImage.
Всем спасибо.
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
12.04.2014, 06:02
Ответы с готовыми решениями:

Цвет пикселя
Как узнать какого цвета пиксель?

Считывание цвета пикселя
Всем доброго времени суток! У меня есть окно программы: Есть код: QPixmap *p = new QPixmap; *p =...

Выделение пикселя на изображении QT
Добрый день. Возможно ли встроенными функциями выделить на изображении самый светлый участок и узнать его координаты?

32
1443 / 1326 / 131
Регистрация: 20.03.2009
Сообщений: 4,689
Записей в блоге: 11
21.04.2014, 17:48
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от танкист34 Посмотреть сообщение
а почему именно 16 ?
Читай выше по представлению RGB/ARGB. Это в 8-битах была таблица цветов, и оперировали номером цвета. Представление в десятичном в виде не очень удобное.
У QImage есть ряд конструкторов, для получения изображения из массива
C++ (Qt)
1
2
    QImage ( uchar * data, int width, int height, Format format )
    QImage ( const uchar * data, int width, int height, Format format )
0
-23 / 0 / 2
Регистрация: 15.03.2013
Сообщений: 328
21.04.2014, 18:05  [ТС]
Цитата Сообщение от Dmitriy_M Посмотреть сообщение
Читай выше по представлению RGB/ARGB
а что про представление читать: то что 8 бит отводится под каждую компоненту == это и определяет глубину цвета изображения.
В том примере который вы скинули не применяется метод bits.
Мне необходимо знать что именно возвращает bits, если перевести дословно, то получается, что он возвращает данные первого пикселя, но почему под данные всего 8 бит, если изображение с глубиной цвета 32 бита.
0
1443 / 1326 / 131
Регистрация: 20.03.2009
Сообщений: 4,689
Записей в блоге: 11
22.04.2014, 13:50
Цитата Сообщение от танкист34 Посмотреть сообщение
В том примере который вы скинули не применяется метод bits.
потому что там удобно идти построчно для генерации изображения, иначе бы пришлось писать что то типа
data[width*j+i], что бы обратиться к пикселу по индексу j,i
Цитата Сообщение от танкист34 Посмотреть сообщение
Мне необходимо знать что именно возвращает bits, если перевести дословно, то получается, что он возвращает данные первого пикселя, но почему под данные всего 8 бит
наименьший размер данных байт и есть формат QImage::Format_Mono в котором 1 пиксел представлен 1 битом.

Само изображение хранится в одномерном массиве, для 24-32 бита это uint data[ширина*высота], для 8-бит char data[ширина*высота]. В Си массив это указатель на первый элемент, bits возвращает указатель на эту область памяти.
1
-23 / 0 / 2
Регистрация: 15.03.2013
Сообщений: 328
22.04.2014, 14:31  [ТС]
Dmitriy_M, спасибо, буду разбираться дальше
0
-23 / 0 / 2
Регистрация: 15.03.2013
Сообщений: 328
24.04.2014, 20:34  [ТС]
Dmitriy_M, дак вот, если идти построчно таким способом:
C++ (Qt)
1
2
3
4
5
//uchar * aaa = img.bits();
              uchar * aaa = img.scanLine(0);
              QRgb * uuu = (QRgb*)&aaa;
              QRgb red = qRed(*(uuu));
              ui->Zn_pixel_Browser->setText(QString::number(red, 10));
то каждый раз при открытии одной и той же картинки получается разные значения пикселя, не знаю почему так выходит.
Согласно спавке, если изображение с глубиной в 32 бита, то надо преобразовать указатель, что я и сделал. А дальше просто беру значение находящееся по этому адресу.
0
1443 / 1326 / 131
Регистрация: 20.03.2009
Сообщений: 4,689
Записей в блоге: 11
25.04.2014, 10:43
танкист34, если правильно разобрал 3 строку, ты берешь адрес переменной aaa.
C++ (Qt)
1
2
uint * aaa = reinterpret_cast<uint*>(img.scanLine(0));
QRgb red = qRed(aaa[0]);
0
-23 / 0 / 2
Регистрация: 15.03.2013
Сообщений: 328
29.04.2014, 22:10  [ТС]
Dmitriy_M, вроде наваял функцию получения значения пикселей используя scanLine
C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
void MainWindow::data_pixels(QImage img) //получение значений пикселей изображени, используя scanLine(int);
{
    shirina = img.width();
    visota = img.height();
 
    for(int i = 0; i < shirina; i++)
    {
        uint * ptr_stroka = reinterpret_cast<uint*>(img.scanLine(i));
 
        for(int j = 0; j < visota; j++)
        {
            *ukazatel = *ptr_stroka;
            ptr_stroka++;
            ukazatel++;
        }
 
    }
 
}
C++ (Qt)
1
uint *ukazatel;
только как теперь получить назад изображение для проверки не знаю. Точнее не знаю как применить конструктор, данный вами выше.
0
1443 / 1326 / 131
Регистрация: 20.03.2009
Сообщений: 4,689
Записей в блоге: 11
30.04.2014, 11:22
C++ (Qt)
1
QImage img2( reinterpret_cast<uchar*>(ukazatel), shirina, visota, img.format())
0
-23 / 0 / 2
Регистрация: 15.03.2013
Сообщений: 328
30.04.2014, 19:04  [ТС]
Dmitriy_M, вот так вот дописал в функцию
C++ (Qt)
1
2
3
QImage img2( reinterpret_cast<uchar*>(ukazatel), shirina, visota, img.format());
    QString fileName = QFileDialog::getSaveFileName(this, QString("Сохранить как..."), QString("./home"), QString("SAV (*.bmp)"));
    img2.save(fileName, 0, -1);
вылетает программа, когда начинаешь сохранять файл ex: с именем 1.bmp

считывал вот таким макаром:
C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
12
13
void MainWindow::OpenFile()
{
    QString fileName = QFileDialog::getOpenFileName(this, QString("Открыть файл"), QString("./home"), QString("TXT (*.bmp)"));
    QFile file(fileName);
    if (file.open(QIODevice::ReadOnly))
          {
              QImage img(fileName);
              //massiv_color = vector_znach(img);
              data_pixels(img);
              file.close();
          }
 
}
0
1443 / 1326 / 131
Регистрация: 20.03.2009
Сообщений: 4,689
Записей в блоге: 11
30.04.2014, 20:37
танкист34, где и чем инициализируется ukazatel?
0
-23 / 0 / 2
Регистрация: 15.03.2013
Сообщений: 328
30.04.2014, 20:47  [ТС]
Dmitriy_M, я чуть выше скидывал:
C++ (Qt)
1
uint *ukazatel;// в классе MainWindow с модификатором public
0
1443 / 1326 / 131
Регистрация: 20.03.2009
Сообщений: 4,689
Записей в блоге: 11
01.05.2014, 12:35
Цитата Сообщение от танкист34 Посмотреть сообщение
чуть выше скидывал
просмотрел всю историю, ничего подобного.
У тебя тут баг на баге, ты вообще C++ знаешь?
0
-23 / 0 / 2
Регистрация: 15.03.2013
Сообщений: 328
01.05.2014, 13:12  [ТС]
Dmitriy_M, учусь учусь потихоньку, что за баг ? где?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
01.05.2014, 13:12

Считать цвет пикселя
Доброго времени суток, можно ли с помощью QT'a узнать какой пиксель по конкретным координатам экрана? (не в программе а в среде windows, к...

QBitmap получить цвет пикселя
Какой метод в QBitmap возвращает цвет пикселя(x,y) или возможно существует другой класс, который сможет это сделать?

Установить цвет пикселя в QGraphicsScene
QImage image(scene-&gt;sceneRect().size().toSize(), QImage::Format_ARGB32); image.fill(Qt::transparent); ...

Соотнесение цвета пикселя с заданными цветами
Доброго времени суток. Есть цвет пикселя (QRgb currPixelColor). Задача: идентифицировать цвет как представителя одного из слеюущих (помимо...

Какой функцией можно получить цвет пикселя в заданных координатах?
К примеру while (true) { QCursor::setPos(200, 200); //здесь получаем цвет пикселя if(color_at_position ==...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
33
Ответ Создать тему
Новые блоги и статьи
Запустил конкурс "тем и промптов для текстовых квестов созданных почти чисто ИИ"
Adler 06.10.2026
Всем привет! За последние три-четыре дня я создал более 16 текстовых квестовых игр используя преимущественно по одному запросу к ИИ на игру. Мне так понравилось смотреть все ветки/ сцены во всех. . .
ИИ не может найти нужный язык в списке
Supersumestria 05.10.2026
Я ему даю вот такое изображение и прошу найти и подчеркнуть немецкий язык. Возвращает он вот это: https:/ / i. **********/ vqBWLe2. png Нужную строчку в 3й колонке просто выдумал. . Это. . .
Новая последняя моя музыка в SUNO
zorxor 05.10.2026
Здравствуйте, дорогие мои друзья! С большой радостью я хотел бы представить вам свою новую последнею музыку, которую сгенерировала мне по моей просьбе нейросеть SUNO. С уважением, zorxor. Это. . .
Программный домашний кинотеатр
russiannick 27.09.2026
Сподобился на программный домашний кинотеатр. В качестве ЯВУ по традиции выбрал js. В помощники взял Яндекс-Алису. Было создано три зала на разные интересы. исторические и ретро сериал Хичкок. . .
Беседа с ИИ о программистах, недопускающих к созданию и правке кода генеративные ИИ и причины этого
zorxor 21.09.2026
Раньше я радовался или получал некоторые эмоции, пусть небольшие, но всё же, от самого процесса написания кода, рекомпиляции и запуска, видя постепенное развитие программы и прочее. А теперь лень. . .
Мобильное приложение ColorStep
pavlinmavlin 17.09.2026
Реализовал приложение Красный, Зеленый, Синий в Unity3d + c#. Название изменил на ColorStep. Приложение прошло модерацию и теперь доступно для скачивания. Делал его сам, шаг за шагом — и вот,. . .
Запрет дублирования строк в табличной части
Maks 13.09.2026
Реализация из решения ниже выполнена на нетиповом справочнике "Нормы ТО" с табличной часть "Виды ТО", разработанного в КА2, со следующими реквизитами: - ВидТО (СправочникСсылка. ВидыТО); - ВидГСМ. . .
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Jin X 06.09.2026
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр. Работая с форумом и нейросетями в браузере часто хочется что-то подкорректировать или добавить какого-то функционала. Ниже прикреплён. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru