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

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

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

GDI+ Как Image сохранить в буфер / массив? - C++

12.07.2015, 12:08. Просмотров 319. Ответов 0
Метки нет (Все метки)

Здравствуйте, сижу бьюсь над проблемой рисования в памяти через GDI+

В память рисует, всё работает, но я никак не могу сообразить как же сохранить Image не в файл, а в буфер

Например canvas это Image, и в файл он сохраняется

C++ (Qt)
1
2
3
4
    
    CLSID pngClsid;
    GetEncoderClsid(L"image/png", &pngClsid);
    canvas->Save(L"D:\\pic.png", &pngClsid, NULL); //
Но как же сделать сохранить в буфер, в классе есть метод

C++ (Qt)
1
2
3
4
5
Image::Save(
    IN IStream* stream,
    IN const CLSID* clsidEncoder,
    IN const EncoderParameters *encoderParams
    )
а как им воспользоваться, и возможно ли мне сохранить его потом в буфер без предварительной записи в файл?

Добавлено через 58 минут
А всё сделал
Правда пришлось пользоваться уродливой ф-ией

C++ (Qt)
1
Stream *stream = SHCreateMemStream(NULL, NULL);
Тыкал, тыкал и натыкал, вроде заработало, если кто покажет как это сделать умнее - буду очень благодарен

C++ (Qt)
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
    IStream *stream = SHCreateMemStream(NULL, NULL);
 
    CLSID pngClsid;
    GetEncoderClsid(L"image/png", &pngClsid);
    stat    =   canvas->Save(stream, &pngClsid, NULL);
 
    unsigned long ree;
    ULARGE_INTEGER dd;
 
    LARGE_INTEGER d;
    d.HighPart = 0;
    d.LowPart = 0;
    d.QuadPart = 0;
 
    stream->Seek(d, STREAM_SEEK_CUR, &dd);
 
    unsigned long si111ze = dd.LowPart;
 
    stream->Seek(d, STREAM_SEEK_SET, &dd);
 
 
    int ss = stream->Read(mem, si111ze, &ree);
 
    *p = mem;
    *size = si111ze;
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
12.07.2015, 12:08
Здравствуйте! Я подобрал для вас темы с ответами на вопрос GDI+ Как Image сохранить в буфер / массив? (C++):

как в тексте (из файла) найти все числа и сохранить их в отдельный массив?? - C++
вообще без понятия просто из файла прочитала все разделила на лексемы(точка, зпт, пробел, двоет, плюс) а дальше что??? ...

Массив int перевести в буфер - C++
Нужно перевести массив интов в char* array, а потом это сделать наоборот т.е опять получить массив интов. Добавлено через 1 минуту ...

Как поэлементно считать текст с файла с помощью fstream, и сохранить каждый символ в массив? - C++
как поэлементно считать текст с файла,и сохранить каждый символ в массив?

Как избавиться от мерцания в gdi? - C++
Как избавиться от мерцания в gdi? Пробовал делать двойную буфферизацию с помощью CreateCompatibleBitmap и BitBlt, но не рисовался даже...

Как подключить GDI+ в Code::Blocks? - C++
Здравствуйте. Пытаюсь работать с графикой в Code::Blocks, но, найти GDI+ не удалось: т.е. ни библиотек, ни заголовочных файлов там...

Как через GDI нарисовать пиксел на окне? - C++
Как через GDI нарисовать пиксел на окне?

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
12.07.2015, 12:08
Привет! Вот еще темы с ответами:

Как заставить не затирать окном полученную графику в GDI? - C++
Первый раз столкнулся с GDI и вот никак не могу допереть как заставить не затирать окном полученную графику... Графика выводиться потоком...

Функция создает объекты и указателями на них заполняет массив. При выходе из функции вызываются деструкторы объектов. Как сохранить объекты? - C++
Вопрос прост: как при выходе из функции сохранить объекты, которые были созданы в данной функции (указатели объектов положены в массив)?

String как буфер - C++
можно ли использовать string как буфер? К примеру: void test(){ char buf; sprintf_s(buf, "HelloWorld!"); } работает...

В GDI+ возникла ошибка общего вида. Я пытаюсь перевести Image в байт-массив - C++/CLI WinForms
Необработанное исключение типа "System.Runtime.InteropServices.ExternalException" произошло в System.Drawing.dll Дополнительные...


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

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

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