вывод картинки в поток
От: HR0FT  
Дата: 01.11.06 09:40
Оценка:
Есть следующий вопрос:
Можно ли записать картинку в поток вывода?
делаю так:
std::ifstream f("image.jpg");
char c;
while(f.get(c))
std::cout << c;

Но выводятся только несколько первых символов.
Re: вывод картинки в поток
От: _INDY_ Россия  
Дата: 01.11.06 09:44
Оценка:
Здравствуйте, HR0FT, Вы писали:

HRF>Есть следующий вопрос:

HRF>Можно ли записать картинку в поток вывода?
HRF>делаю так:
HRF>std::ifstream f("image.jpg");
HRF>char c;
HRF>while(f.get(c))
HRF> std::cout << c;

HRF>Но выводятся только несколько первых символов.

ИМХО Вы пвтаетесь работать с файлом как со строкой заканчивающейся нулём, в результате приходите к известному финалу ....
Per Aspera Ad Astra
Re[2]: вывод картинки в поток
От: HR0FT  
Дата: 01.11.06 09:54
Оценка:
Здравствуйте, _INDY_, Вы писали:

_IN> ИМХО Вы пвтаетесь работать с файлом как со строкой заканчивающейся нулём, в результате приходите к известному финалу ....


Не подскажите что нужно сделать чтобы всетаки записать картинку?
Re[3]: вывод картинки в поток
От: _INDY_ Россия  
Дата: 01.11.06 10:02
Оценка:
Здравствуйте, HR0FT, Вы писали:

HRF>Здравствуйте, _INDY_, Вы писали:


_IN>> ИМХО Вы пвтаетесь работать с файлом как со строкой заканчивающейся нулём, в результате приходите к известному финалу ....


HRF>Не подскажите что нужно сделать чтобы всетаки записать картинку?


Прошу не кидаться помидорами, но всё осмелюсь предложить решение — перебирать поток и все непечатные символы заменять пробелами, тогда вы получите правильное текстовое отоборажение бинарного файла.
Per Aspera Ad Astra
Re: вывод картинки в поток
От: Shmakov Россия  
Дата: 01.11.06 10:12
Оценка:
Сделать поток binary

_setmode(_fileno(f), _O_BINARY);
Re[2]: вывод картинки в поток
От: Shmakov Россия  
Дата: 01.11.06 10:15
Оценка:
в частности

_setmode(_fileno(stdout), _O_BINARY);
Re: вывод картинки в поток
От: zaufi Земля  
Дата: 01.11.06 10:29
Оценка:
Здравствуйте, HR0FT, Вы писали:

HRF>Есть следующий вопрос:

HRF>Можно ли записать картинку в поток вывода?

отчего же нет?

std::ifstream f("image.jpg", std::ios::binary);
// однако луче не посимвольно это делать...
std::streamsize file_size = f.seekg(0, std::ios::end).tellg();
f.seekg(0, std::ios::beg);
// если размер картинки гигабайт то луче всетки выделить память динамически на не на стеке :)
char buf[file_size];
f.read(buf, file_size);
cout.write(buf, file_size);
Re[3]: вывод картинки в поток
От: HR0FT  
Дата: 01.11.06 10:32
Оценка: :))
Здравствуйте, Shmakov, Вы писали:

S>в частности


S>_setmode(_fileno(stdout), _O_BINARY);


сделал так:

_setmode(_fileno(stdout), _O_BINARY);
std::ifstream f("image.jpg", std::ios::binary);
std::vector< char > buf( 4096 );
while(f)
{
//std::string s;
f.read( &buf[ 0 ], buf.size() );
//s.append( &buf[ 0 ], f.gcount() );
fwrite(&buf[ 0 ],buf.size(), 1,stdout);
//std::cout << s;
}
все работает — но проблема!
при работе прграммы ужасно пищит системный динамик на компе.
Re[4]: вывод картинки в поток
От: zaufi Земля  
Дата: 01.11.06 10:34
Оценка:
Здравствуйте, HR0FT, Вы писали:
HRF>все работает — но проблема!
HRF>при работе прграммы ужасно пищит системный динамик на компе.

извиняюсь з анискромный вопрос: а ты ожидал увидеть картинку на экране?
Re[5]: вывод картинки в поток
От: HR0FT  
Дата: 01.11.06 10:43
Оценка:
Здравствуйте, zaufi, Вы писали:

Z>Здравствуйте, HR0FT, Вы писали:

HRF>>все работает — но проблема!
HRF>>при работе прграммы ужасно пищит системный динамик на компе.

Z>извиняюсь з анискромный вопрос: а ты ожидал увидеть картинку на экране?


нет конечно уидеть я хотел бинарь
Re[2]: вывод картинки в поток
От: HR0FT  
Дата: 01.11.06 10:49
Оценка:
Здравствуйте, zaufi, Вы писали:

Z>Здравствуйте, HR0FT, Вы писали:


HRF>>Есть следующий вопрос:

HRF>>Можно ли записать картинку в поток вывода?

Z>отчего же нет?


Z>
Z>std::ifstream f("image.jpg", std::ios::binary);
Z>// однако луче не посимвольно это делать...
Z>std::streamsize file_size = f.seekg(0, std::ios::end).tellg();
Z>f.seekg(0, std::ios::beg);
Z>// если размер картинки гигабайт то луче всетки выделить память динамически на не на стеке :)
Z>char buf[file_size];
Z>f.read(buf, file_size);
Z>cout.write(buf, file_size);
Z>


Спасибо!
Можно зделать так чтобы при этом не пищал динамик?
Re[3]: вывод картинки в поток
От: Garrett Россия  
Дата: 01.11.06 11:27
Оценка:
HRF>Спасибо!
HRF>Можно зделать так чтобы при этом не пищал динамик?

Писк происходит при выводе символа с кодом 7, если мне не изменяет память. Его просто выводить не надо
в борьбе со здравым смыслом победа будет за нами!
Re[3]: вывод картинки в поток
От: Sergey Россия  
Дата: 01.11.06 11:29
Оценка:
> Спасибо!
> Можно зделать так чтобы при этом не пищал динамик?

net stop beep — и динамик вообще не будет пищать
Posted via RSDN NNTP Server 2.0
Одним из 33 полных кавалеров ордена "За заслуги перед Отечеством" является Геннадий Хазанов.
Re[3]: вывод картинки в поток
От: Smal Россия  
Дата: 01.11.06 11:31
Оценка:
Здравствуйте, HR0FT, Вы писали:

HRF>Здравствуйте, zaufi, Вы писали:


Z>>Здравствуйте, HR0FT, Вы писали:


HRF>>>Есть следующий вопрос:

HRF>>>Можно ли записать картинку в поток вывода?

Z>>отчего же нет?


Z>>
Z>>std::ifstream f("image.jpg", std::ios::binary);
Z>>// однако луче не посимвольно это делать...
Z>>std::streamsize file_size = f.seekg(0, std::ios::end).tellg();
Z>>f.seekg(0, std::ios::beg);
Z>>// если размер картинки гигабайт то луче всетки выделить память динамически на не на стеке :)
Z>>char buf[file_size];
Z>>f.read(buf, file_size);
Z>>cout.write(buf, file_size);
Z>>


HRF>Спасибо!

HRF>Можно зделать так чтобы при этом не пищал динамик?

А зачем его выводить в cout? Выводи в файл. Или выводи в cout и перенаправляй в файл.
С уважением, Александр
Re[2]: вывод картинки в поток
От: night beast СССР  
Дата: 01.11.06 11:34
Оценка:
Здравствуйте, zaufi, Вы писали:

HRF>>Есть следующий вопрос:

HRF>>Можно ли записать картинку в поток вывода?

Z>отчего же нет?


Z>std::ifstream f("image.jpg", std::ios::binary);
Z>// однако луче не посимвольно это делать...
Z>std::streamsize file_size = f.seekg(0, std::ios::end).tellg();
Z>f.seekg(0, std::ios::beg);
Z>// если размер картинки гигабайт то луче всетки выделить память динамически на не на стеке :)

эт вы здорово придумали. особенно, если учесть что file_size -- не константа времени компиляции  ;) 

Z>char buf[file_size];
Z>f.read(buf, file_size);

может лучше while ( f.read(buf, file_size) ) {...}
где file_size -- константа.

Z>cout.write(buf, file_size);
Re[3]: вывод картинки в поток
От: zaufi Земля  
Дата: 01.11.06 11:45
Оценка:
Здравствуйте, night beast, Вы писали:

NB>Здравствуйте, zaufi, Вы писали:


HRF>>>Есть следующий вопрос:

HRF>>>Можно ли записать картинку в поток вывода?

Z>>отчего же нет?


NB>
Z>>std::ifstream f("image.jpg", std::ios::binary);
Z>>// однако луче не посимвольно это делать...
Z>>std::streamsize file_size = f.seekg(0, std::ios::end).tellg();
Z>>f.seekg(0, std::ios::beg);
Z>>// если размер картинки гигабайт то луче всетки выделить память динамически на не на стеке :)

NB>эт вы здорово придумали. особенно, если учесть что file_size -- не константа времени компиляции  ;) 
 спасиба. мне и самому нравица :) -- для развлечения попробуйте скомпилить это :))

Z>>char buf[file_size];
Z>>f.read(buf, file_size);

NB>может лучше while ( f.read(buf, file_size) ) {...}
NB>где file_size -- константа.

зачем заморачиваца? нафик нужен еще один уровень буферизации?

Z>>cout.write(buf, file_size);
NB>
Re[4]: вывод картинки в поток
От: HR0FT  
Дата: 01.11.06 11:46
Оценка:
S>А зачем его выводить в cout? Выводи в файл. Или выводи в cout и перенаправляй в файл.

С начальством не поспоришь
Re[3]: вывод картинки в поток
От: Shmakov Россия  
Дата: 01.11.06 11:48
Оценка:
HRF>Спасибо!
HRF>Можно зделать так чтобы при этом не пищал динамик?

Если ты выводишь в консольный экран — то пищать будет (это особенность работы std::cout потока, когда конечной точкой является консоль). Это свойство консольного потока — при получении символа 0x08.

Насколько я понимаю здравый смысл — ты не будешь выводить реально в своей задаче это в консоль, это ведь никому не нужно, а будешь запускать свое приложение в рамках другого процесса — который будет перенаправлять stdout поток в свои недра — например так работают CGI приложения для HTTP серверов — там никакого звука не будет, так как данные идут не на консоль — а в другой процесс.
Re[4]: вывод картинки в поток
От: HR0FT  
Дата: 01.11.06 11:52
Оценка: :)
Здравствуйте, Sergey, Вы писали:


>> Спасибо!

>> Можно зделать так чтобы при этом не пищал динамик?

S>net stop beep — и динамик вообще не будет пищать


Спасибо — а не то я уже начал раздражать рядом сидящих
Re[4]: вывод картинки в поток
От: night beast СССР  
Дата: 01.11.06 11:55
Оценка:
Здравствуйте, zaufi, Вы писали:

Z>>>std::ifstream f("image.jpg", std::ios::binary);
Z>>>// однако луче не посимвольно это делать...
Z>>>std::streamsize file_size = f.seekg(0, std::ios::end).tellg();
Z>>>f.seekg(0, std::ios::beg);
Z>>>// если размер картинки гигабайт то луче всетки выделить память динамически на не на стеке :)

NB>>эт вы здорово придумали. особенно, если учесть что file_size -- не константа времени компиляции  ;) 
Z> спасиба. мне и самому нравица :) -- для развлечения попробуйте скомпилить это :))

экий вы настойчивый  :) 

"ComeauTest.c", line 11: error: expression must have a constant value
 char buf[file_size];
          ^
1 error detected in the compilation of "ComeauTest.c".

hint: variable-length arrays -- это чистый Си.

Z>>>char buf[file_size];
Z>>>f.read(buf, file_size);
Re[5]: вывод картинки в поток
От: zaufi Земля  
Дата: 01.11.06 13:54
Оценка:
Здравствуйте, night beast, Вы писали:

NB>Здравствуйте, zaufi, Вы писали:


NB>
Z>>>>std::ifstream f("image.jpg", std::ios::binary);
Z>>>>// однако луче не посимвольно это делать...
Z>>>>std::streamsize file_size = f.seekg(0, std::ios::end).tellg();
Z>>>>f.seekg(0, std::ios::beg);
Z>>>>// если размер картинки гигабайт то луче всетки выделить память динамически на не на стеке :)

NB>>>эт вы здорово придумали. особенно, если учесть что file_size -- не константа времени компиляции  ;) 
Z>> спасиба. мне и самому нравица :) -- для развлечения попробуйте скомпилить это :))

NB>экий вы настойчивый  :) 

NB>"ComeauTest.c", line 11: error: expression must have a constant value
NB> char buf[file_size];
NB>          ^
NB>1 error detected in the compilation of "ComeauTest.c".

NB>hint: variable-length arrays -- это чистый Си.

да в теме я что это gcc/g++ specific -- проста тут всюду мега гуру советуют друг другу фичи M$ specific -- вот наш ответ! -- тоже спецификовый :)

хотя чессна признаться частенько злуопотребляю данной (удобной чего уж там скрывать :) )  "фичей"

Z>>>>char buf[file_size];
Z>>>>f.read(buf, file_size);

NB>
Re[2]: вывод картинки в поток
От: kan Великобритания  
Дата: 02.11.06 09:06
Оценка: 2 (1)
zaufi wrote:
> std::ifstream f("image.jpg", std::ios::binary);
std::cout << f.rdbuf();
Posted via RSDN NNTP Server 2.0
но это не зря, хотя, может быть, невзначай
гÅрмония мира не знает границ — сейчас мы будем пить чай
Re[4]: вывод картинки в поток
От: Roman Odaisky Украина  
Дата: 02.11.06 18:22
Оценка:
Здравствуйте, Shmakov, Вы писали:

S>Насколько я понимаю здравый смысл — ты не будешь выводить реально в своей задаче это в консоль, это ведь никому не нужно, а будешь запускать свое приложение в рамках другого процесса — который будет перенаправлять stdout поток в свои недра — например так работают CGI приложения для HTTP серверов — там никакого звука не будет, так как данные идут не на консоль — а в другой процесс.


Представляю себе, как сервер rapidshare пищит на каждом 0x07 из каждого файла
До последнего не верил в пирамиду Лебедева.
Re[5]: вывод картинки в поток
От: kan Великобритания  
Дата: 03.11.06 15:03
Оценка: :)
Roman Odaisky wrote:

> Представляю себе, как сервер rapidshare пищит на каждом 0x07 из каждого

> файла
Просто устанавливают большой RAID из спикеров и пищание распараллеливается.
Posted via RSDN NNTP Server 2.0
но это не зря, хотя, может быть, невзначай
гÅрмония мира не знает границ — сейчас мы будем пить чай
Re[5]: вывод картинки в поток
От: trophim Россия  
Дата: 03.11.06 17:20
Оценка:
Здравствуйте, Roman Odaisky, Вы писали:

RO>Здравствуйте, Shmakov, Вы писали:


S>>Насколько я понимаю здравый смысл — ты не будешь выводить реально в своей задаче это в консоль, это ведь никому не нужно, а будешь запускать свое приложение в рамках другого процесса — который будет перенаправлять stdout поток в свои недра — например так работают CGI приложения для HTTP серверов — там никакого звука не будет, так как данные идут не на консоль — а в другой процесс.


RO>Представляю себе, как сервер rapidshare пищит на каждом 0x07 из каждого файла


Они решили проблему — динамики скрутили!
[EOF]
Let it be! — Давайте есть пчелу!
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.