crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

 
Ответить в данную темуНачать новую тему
> Массив байт QPixmap, Нужно преобразовывать bmp изображение
bahek3
  опции профиля:
сообщение 4.4.2011, 16:35
Сообщение #1


Студент
*

Группа: Новичок
Сообщений: 12
Регистрация: 2.12.2010
Пользователь №: 2237

Спасибо сказали: 0 раз(а)




Репутация:   0  


Здравствуйте! Очень гадит мне жизнь один вопрос... Мне нужно получить массив байт bmp изображения, затем выполнить бинаризацию, и наложить маску низких частот! делать это все нужно ручками! для этого мне нужен массив бай это изображения... Люди добрые, подскажите, есть ли такая возможность? или все уже зашито далеко в глубь и никак не достать?... Просто очень не хочется мне в билдере еще ковыряться... (подсказал знакомый что там можно, но очень уж он меня раздражает)
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
RazrFalcon
  опции профиля:
сообщение 4.4.2011, 16:37
Сообщение #2


Zombie Mod
*****

Группа: Участник
Сообщений: 1654
Регистрация: 24.5.2010
Из: Харьков
Пользователь №: 1752

Спасибо сказали: 64 раз(а)




Репутация:   212  


Вам нужны цвета всех пикселей?

Или такое:
QImage     image;
QByteArray ba;
QBuffer    buffer( &ba );
buffer.open( QIODevice::WriteOnly );
image.save( &buffer, "PNG" );
?

Сообщение отредактировал RazrFalcon - 4.4.2011, 16:41
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Алексей1153
  опции профиля:
сообщение 4.4.2011, 17:18
Сообщение #3


фрилансер
******

Группа: Участник
Сообщений: 2941
Регистрация: 19.6.2010
Из: Обливион
Пользователь №: 1822

Спасибо сказали: 215 раз(а)




Репутация:   34  


bahek3, у BMP несложный формат
http://ru.wikipedia.org/wiki/BMP

единственный момент, который плохо освещён, к примеру, в МСДН, - набор байтов , представляющих биты одной строки пикселов, должен по длине быть выровнен на 32 бита (хвосты заполняются нулями). То ли они копипастят, то ли чо - везде упоминается 16 бит, а это не так. Проверено экперементально :)

Цитата(bahek3 @ 4.4.2011, 19:35) *
Просто очень не хочется мне в билдере еще ковыряться...

если речь идёт о винде, то билдер однозначно идёт на хутор - бабочек собирать )) ВинАПИ доступен отовсюду, лично я в студии работал с битмапами - набор нужных функций в АПИ есть, всё шустро делается
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
bahek3
  опции профиля:
сообщение 5.4.2011, 8:25
Сообщение #4


Студент
*

Группа: Новичок
Сообщений: 12
Регистрация: 2.12.2010
Пользователь №: 2237

Спасибо сказали: 0 раз(а)




Репутация:   0  


Цитата(RazrFalcon @ 4.4.2011, 16:37) *
Вам нужны цвета всех пикселей?

Или такое:
QImage     image;
QByteArray ba;
QBuffer    buffer( &ba );
buffer.open( QIODevice::WriteOnly );
image.save( &buffer, "PNG" );
?


Спасибо вообще за ответ! Нужны цвета... Второй вариант я както раньше пользовал при работе с БД...

Немного поясню алгоритм того, что я хочу сделать... Мне нужно открыть изображение формата bmp, с этим проблем нет... потом мне нужно получить массив всех его точек, выполнить определенные манипуляции, и я хочу попиксельно вывести результирующую картинку...
И вот я не знаю как получить эти цвета, этот массив... С остальным думаю проблем не должно быть...

Цитата(Алексей1153 @ 4.4.2011, 17:18) *
bahek3, у BMP несложный формат
http://ru.wikipedia.org/wiki/BMP
...
ВинАПИ доступен отовсюду, лично я в студии работал с битмапами - набор нужных функций в АПИ есть, всё шустро делается


Благодарю за информацию.... Я уже несколько статей прочитал о формате заголовка bmp и прочие сведения, просмотрел несколько исходников, но не знаю как именно в кт использовать апи... не нашел ни одного примера... с самой QImage QBimap уже много чего перепробовал и все никак не могу я... Чтобы не быть голословным вот легкий кодецкий, дополните пожалуйста кто чем может...

QString sFilePath = QFileDialog::getOpenFileName(this,"Choose an image:",".","*.bmp");
    if(!sFilePath.isEmpty()){
        slotClear();

        m_pPixmap = new QPixmap(sFilePath,"BMP");
        mf_image1->setPixmap(m_pPixmap->scaled(QSize(mf_image1->width(),mf_image1->height()),Qt::KeepAspectRatio));
        slotProcessImage();
    }
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
wiz29
  опции профиля:
сообщение 5.4.2011, 10:55
Сообщение #5


Старейший участник
****

Группа: Участник
Сообщений: 600
Регистрация: 7.7.2010
Из: Санкт-Петербург
Пользователь №: 1866

Спасибо сказали: 94 раз(а)




Репутация:   12  


Чем тебя не устраивает чтение в QImage и работа методами QImage::getPixel & QImage::setPixel, самый простой вариант (если картинки не большие то проблем с производительностью вообще не заметишь) QPixmap в твоей задаче не поможет, он не предоставляет прямого доступа к пиксельной информации изображения.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
bahek3
  опции профиля:
сообщение 5.4.2011, 11:58
Сообщение #6


Студент
*

Группа: Новичок
Сообщений: 12
Регистрация: 2.12.2010
Пользователь №: 2237

Спасибо сказали: 0 раз(а)




Репутация:   0  


Цитата(wiz29 @ 5.4.2011, 10:55) *
... QImage::getPixel & QImage::setPixel...


Для того то эту тему и создал... потому что не знаю как это делается... Попробую эти два метода попользовать... :rolleyes:
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
wiz29
  опции профиля:
сообщение 5.4.2011, 13:00
Сообщение #7


Старейший участник
****

Группа: Участник
Сообщений: 600
Регистрация: 7.7.2010
Из: Санкт-Петербург
Пользователь №: 1866

Спасибо сказали: 94 раз(а)




Репутация:   12  


сори у QImage нет метода getPixel используй QImage::pixel
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
bahek3
  опции профиля:
сообщение 5.4.2011, 15:26
Сообщение #8


Студент
*

Группа: Новичок
Сообщений: 12
Регистрация: 2.12.2010
Пользователь №: 2237

Спасибо сказали: 0 раз(а)




Репутация:   0  


Вот что наколдовал)) Не уверен что это и есть бинаризация, но судя по источнику откуда читал, скорее всего все правильно...
void MainWindow::slotProcessImage()
{
    m_pResultImage = new QImage(m_pImage->width(),m_pImage->height(),QImage::Format_RGB16);
    for(int i = 0; i < m_pImage->width(); i++){
        for(int j = 0; j < m_pImage->height(); j++){
            QColor rgb(m_pImage->pixel(i,j));
            if(((rgb.red() + rgb.green() + rgb.blue()) / 3) > mf_spinValue->value())
                m_pResultImage->setPixel(i,j,qRgb(0,0,0));
            else
                m_pResultImage->setPixel(i,j,qRgb(255,255,255));
        }
    }

    QPixmap pix(QPixmap::fromImage(*m_pResultImage));
    mf_result->setPixmap(pix.scaled(mf_result->width(),mf_result->height(),Qt::KeepAspectRatio));
}



Эскизы прикрепленных изображений
Прикрепленное изображение
 
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Алексей1153
  опции профиля:
сообщение 5.4.2011, 17:00
Сообщение #9


фрилансер
******

Группа: Участник
Сообщений: 2941
Регистрация: 19.6.2010
Из: Обливион
Пользователь №: 1822

Спасибо сказали: 215 раз(а)




Репутация:   34  


bahek3, а как со скоростью работы ?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
bahek3
  опции профиля:
сообщение 5.4.2011, 20:06
Сообщение #10


Студент
*

Группа: Новичок
Сообщений: 12
Регистрация: 2.12.2010
Пользователь №: 2237

Спасибо сказали: 0 раз(а)




Репутация:   0  


Цитата(Алексей1153 @ 5.4.2011, 17:00) *
bahek3, а как со скоростью работы ?


Это просто одно из заданий контрольной работы... Я использую не очень большие изображения... Да и в общем 7-ми метровое изображение не очень то и долго оно выводит....
Второе задание - наложить низкочастотный фильтр... Все, опять же, ручками... Мне важно было просто научиться доставать эти пиксели... Ну а дальше уже умные люди все расписали как что вычисляется)) остается только в коде реализовать...
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 22.12.2024, 9:28