конвертировать буфер изображения в файловый поток - PullRequest
1 голос
/ 21 июня 2011

Что-то похожее на это, возможно, было задано ранее, я не мог найти точный ответ на мою проблему, чтобы решить спросить здесь Я работаю со сторонней платформой, которая имеет свои собственные классы, определенные для обработки файлов изображений. Он принимает только имя файла, и вся реализация заключается в возможности открыть эти файловые потоки и выполнить чтение / запись. Я хотел бы ввести буфер изображения (который я получаю с помощью предварительной обработки ранее открытого изображения) и передать его в эту среду. Проблема в том, что я не могу передать ему буфер, только строку имени файла.

Я ищу лучший способ преобразовать мой буфер в файловый поток, чтобы он мог быть найден и принят фреймворком. Пожалуйста, помогите мне понять, на что я должен смотреть. Я попытался прочитать о streambuf (filebuf и stringbuf) и попытался назначить буфер этим типам, но пока безуспешно.

1 Ответ

1 голос
/ 21 июня 2011

Если фреймворк принимает только имя файла, вы должны передать ему имя файла. Это означает, что данные должны находиться в файловой системе.

Переносимый ответ: «записать свои данные во временный файл и передать его имя».

В Unix вы можете использовать именованный канал и разветвлять другой поток для передачи данных через канал ...

Но, честно говоря, вам лучше использовать временный файл. Если вам удастся открыть, прочитать и удалить файл достаточно быстро, он, скорее всего, никогда не попадет на диск, поскольку ядро ​​будет кэшировать данные.

И если вы можете использовать виртуальный диск (tmpfs), вы можете гарантировать, что все происходит в памяти.

[править]

Еще одна мысль. Если вы можете изменить свою кодовую базу для работы на std::iostream вместо std::fstream, вы можете передать ей std::stringstream. Они поддерживают все обычные iostream операции с буфером памяти, включая такие вещи, как поиск.

...