Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
ken_guru
1 / 1 / 0
Регистрация: 18.10.2011
Сообщений: 16
#1

Экспорт двухмерного массива в JPEG / BMP (график) - C++

05.07.2013, 21:02. Просмотров 724. Ответов 14
Метки нет (Все метки)

Уважаемые форумчане,

Предисловие:
есть программа, которые делает определенные итерационные расчеты и на каждой итерации выдает пачку txt файлов - в каждом из который содержатся данные о величине той или иной физической величины в определенной точке пространства (проекции - т.е. двухмерный вид)

Что хочется получить в результате:
Чтобы кроме txt-файлов программа сохраняла уже построенные графики в любом графическом формате - JPEG / BMP и т.д.

Вопрос:
Как это реализовать? какие лучше всего использовать библиотеки, способы?
В программе также реализован вывод окна с контрольным графиком в конце просчета с помощью GLUTa - можно ли как-то glut использовать для этой цели?

Использую MVS 2008

Заранее большое спасибо!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
05.07.2013, 21:02
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Экспорт двухмерного массива в JPEG / BMP (график) (C++):

График в формате bmp - C++
Доброго времени суток, уважаемые форумчане. Есть довольно интересная проблемка - а именно - нужно построить график по выборке значений,...

Сортировка двухмерного массива по i и j - C++
Нужно написать алгоритм, который создавал бы массив чисел, при чем так, чтобы каждый последующий элемент (по i или по j) был меньше...

Из двухмерного массива в одномерный - C++
Всем привет.Передо мной предстала задача перевести двухмерный массив в одномерный. Вот пример : 1 0 0 1 0 0 0 1 1 0 0 1 1 1 0 1...

Сортировка двухмерного массива - C++
Здравствуйте, Нужно применить сортировку к текстовой базе данных. Поля базы только string. Я записываю БД в двумерный массив string. ...

Сортировка двухмерного массива - C++
Дан двухмерный массив. Отсортировать столбики массива, поставив вначале четные элементы,а потом нечетные, не меняя при этом их порядок...

Удаление двухмерного массива - C++
Доброго дня. Выделяем память под квадратную матрицу --> заполняем --> освобождаем занятую память . Следующий вопрос : при повторном...

14
Avazart
Эксперт С++
7570 / 5555 / 326
Регистрация: 10.12.2010
Сообщений: 24,914
Записей в блоге: 17
06.07.2013, 01:37 #2
Думаю gdi / gdi+

http://www.rsdn.ru/article/gdi/gdiplus1.xml#E4GAC
0
castaway
Эксперт С++
4924 / 3032 / 372
Регистрация: 10.11.2010
Сообщений: 11,085
Записей в блоге: 10
Завершенные тесты: 1
06.07.2013, 15:46 #3
Цитата Сообщение от ken_guru Посмотреть сообщение
в любом графическом формате
http://freeimage.sourceforge.net/features.html
http://openil.sourceforge.net/
0
Avazart
Эксперт С++
7570 / 5555 / 326
Регистрация: 10.12.2010
Сообщений: 24,914
Записей в блоге: 17
06.07.2013, 16:22 #4
А есть живой пример для Devil ? А то в доке непонятно как его использовать и для чего.
0
castaway
Эксперт С++
4924 / 3032 / 372
Регистрация: 10.11.2010
Сообщений: 11,085
Записей в блоге: 10
Завершенные тесты: 1
06.07.2013, 16:24 #5
А в архиве с исходниками они разве "не живые" ?
0
Avazart
Эксперт С++
7570 / 5555 / 326
Регистрация: 10.12.2010
Сообщений: 24,914
Записей в блоге: 17
06.07.2013, 16:30 #6
Цитата Сообщение от lazybiz Посмотреть сообщение
А в архиве с исходниками они разве "не живые" ?
Ну к примеру как bmp задать попиксельно, переконвертить в jpeg и сохранить.
0
castaway
Эксперт С++
4924 / 3032 / 372
Регистрация: 10.11.2010
Сообщений: 11,085
Записей в блоге: 10
Завершенные тесты: 1
06.07.2013, 16:48 #7
Я ни разу не пользовался этой библиотекой, но даже мне хватило 2 минуты чтобы понять что этим занимаются функции ilCopyPixels и ilSetPixels. Сохранением занимаются функции ilSave и ilSaveImage.
0
Avazart
Эксперт С++
7570 / 5555 / 326
Регистрация: 10.12.2010
Сообщений: 24,914
Записей в блоге: 17
06.07.2013, 16:53 #8
Цитата Сообщение от lazybiz Посмотреть сообщение
Я ни разу не пользовался этой библиотекой,
Ну я тоже... поэтому предположил раз предлагаете может есть какие-то наработки кода...

Цитата Сообщение от lazybiz Посмотреть сообщение
но даже мне хватило 2 минуты чтобы понять что этим занимаются функции ilCopyPixels и ilSetPixels. Сохранением занимаются функции ilSave и ilSaveImage.
Это я тоже нашел

Главное - конвертация между форматами ?
0
castaway
Эксперт С++
4924 / 3032 / 372
Регистрация: 10.11.2010
Сообщений: 11,085
Записей в блоге: 10
Завершенные тесты: 1
06.07.2013, 16:56 #9
Цитата Сообщение от Avazart Посмотреть сообщение
может есть какие-то наработки кода...
Наработок нет, то что предложил просто нашел по первым запросам google.
Честно говоря, библиотека очень проста, интерфейс взаимодействия подобен OpenGL, т.ч. разобраться там не сложно. В этом архиве: http://prdownloads.sourceforge.net/openil/Docs.zip?download удобная оффлайн документация если тебе это интересно.
0
Avazart
Эксперт С++
7570 / 5555 / 326
Регистрация: 10.12.2010
Сообщений: 24,914
Записей в блоге: 17
06.07.2013, 17:00 #10
Да там бы как бы pdf была, а куча html-лек всегда неудобно
0
castaway
Эксперт С++
4924 / 3032 / 372
Регистрация: 10.11.2010
Сообщений: 11,085
Записей в блоге: 10
Завершенные тесты: 1
06.07.2013, 17:10 #11
Цитата Сообщение от Avazart Посмотреть сообщение
а куча html-лек всегда неудобно
Ну не скажи, по ссылкам прыгать я считаю более удобно чем листать бесконечные страницы..
0
Avazart
Эксперт С++
7570 / 5555 / 326
Регистрация: 10.12.2010
Сообщений: 24,914
Записей в блоге: 17
06.07.2013, 17:12 #12
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
#include<IL/il.h>
#include<stdlib.h> /* because of malloc() etc. */
int main(int argc, const char * argv[])
{
ILuint handle, w, h;
/* First we initialize the library. */
/*Do not forget that... */
ilInit();
/* We want all images to be loaded in a consistent manner */
ilEnable(IL_ORIGIN_SET);
/* In the next section, we load one image */
ilGenImages(1, & handle);
ilBindImage(handle);
ILboolean loaded = ilLoadImage("original_file.jpg");
if (loaded == IL_FALSE)
return -1; /* error encountered during loading */
/* Let’s spy on it a little bit */
w = ilGetInteger(IL_IMAGE_WIDTH); // getting image width
h = ilGetInteger(IL_IMAGE_HEIGHT); // and height
printf("Our image resolution: %dx%d\n", w, h);
/* how much memory will we need? */
int memory_needed = w * h * 3 * sizeof(unsigned char);
/* We multiply by 3 here because we want 3 components per pixel */
ILubyte * data = (ILubyte *)malloc(memory_needed);
/* finally get the image data */
ilCopyPixels(0, 0, 0, w, h, 1, IL_RGB, IL_UNSIGNED_BYTE, data);
/* We want to do something with the image, right? */
int i;
for(i = 0; i < memory_needed; i++)
if(i % 31 == 0) /* vandalise the image */
data[i] = i % 255;
/* And maybe we want to save that all... */
ilSetPixels(0, 0, 0, w, h, 1, IL_RGB, IL_UNSIGNED_BYTE, data);
/* and dump them to the disc... */
ilSaveImage("our_result.png");
/* Finally, clean the mess! */
ilDeleteImages(1, & handle);
free(data); data = NULL;
return 0;
}

Грузят jpg, делают преобразования что-то с пикселями и сохраняют в png.
Как я понимаю jpg преобразовывается в bmp иначе как можно обратиться к пикселям ?

Добавлено через 56 секунд
Цитата Сообщение от lazybiz Посмотреть сообщение
Ну не скажи, по ссылкам прыгать я считаю более удобно чем листать бесконечные страницы..
Зато есть поиск ...
0
castaway
Эксперт С++
4924 / 3032 / 372
Регистрация: 10.11.2010
Сообщений: 11,085
Записей в блоге: 10
Завершенные тесты: 1
06.07.2013, 17:21 #13
Для того чтобы вывести изображение на экран или сохранить его в другом формате для начала его декодируют, результат декодировки - одно- или двумерный массив и некоторая информация о изображении. Это базовые поняти, без которых нельзя работать с изображениями.
Цитата Сообщение от Avazart Посмотреть сообщение
Зато есть поиск ...
Зачем нужен поиск если есть все функции на одной странице, тем более когда не знаешь что искать... Спор тут неуместен, просто я считаю что со мной согласиться большинство опытных людей.

P.S.: BMP - это формат изображения, данные обычно хранятся в нем "как есть", т.е. не в кодированном виде, поэтому правильней сказать что сначала JPEG преобразовывается в именно массив со структурой информации, а далее в кодируется в другой формат.
0
ken_guru
1 / 1 / 0
Регистрация: 18.10.2011
Сообщений: 16
07.07.2013, 08:17  [ТС] #14
Всем спасибо за ответы!

Однако в предложенных вариантах несколько запутался, потому как про них хочется сказать "это все равно, что стрелять из пушки по воробьям"

да и к сожалению большинство примеров разобраны для случаев - загрузили картинку, похимичили, вывели на экран/сохранили. А не для случая - нарисовали картинку попиксельно, ну или что-то в этом роде

в итоге остановился на библиотеке СIMG (http://cimg.sourceforge.net/)

в ней необходимая задача делается в 10 строк без сложной предварительной инициализации

хотя конечно и без минусов не обошлось - нативно поддерживает только BMP - один прогон программы сжирает до 200 MB из-за кучи графиков на выходе.
Но вроде как можно подкрутить либо libgpeg, либо ImageMagick - но пока не успел с ними разобраться...
0
Avazart
Эксперт С++
7570 / 5555 / 326
Регистрация: 10.12.2010
Сообщений: 24,914
Записей в блоге: 17
07.07.2013, 11:57 #15
При использовании gdi/gdi+ ничего прикручивать не пришлось бы

Добавлено через 3 минуты
Цитата Сообщение от ken_guru Посмотреть сообщение
нарисовали картинку попиксельно, ну или что-то в этом роде
Я думал тебе нужно сделать скриншот уже построенных графиков в окне и сохранить.
0
07.07.2013, 11:57
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
07.07.2013, 11:57
Привет! Вот еще темы с ответами:

Перемешивание двухмерного массива - C++
Подскажите как можно перемешать двухмерный массив таким образом , чтобы он в цикле по строкам и столбцам массива перебирал элементы массива...

Сортировка двухмерного массива - C++
Помогите!!!Нужно отсортировать двухмерный массив с использованием указателя. #include&lt;iostream&gt; #include&lt;stdlib.h&gt; #include&lt;time.h&gt; ...

Передача двухмерного массива в функцию - C++
Товарищи, помогите, пожалуйста, с таким вопросом: Я хочу сделать функции ввода и вывода элементов двухмерного массива, да так, чтобы...

Передача двухмерного массива функции - C++
Подскажите пожалуйста как передать статический массив array в функцию fn(), т.е. #include &lt;iostream&gt; using namespace std; void...


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

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru