Re: file input problems (should be an easy question)
<psy_berpunk@hotmail.com> wrote in message
news:1190589419.077127.98040@r29g2000hsg.googlegroups.com...
hey, i'm trying to write a simple program to read gif87a non-
interlaced format with a single image-descriptor ---
I am using djgpp on windows xp.
Sounds simple enough, unfortunatly data in the format is arranged
primarily in single-byte unsigned integers.
So i've been reading them in a chars and casting them as unsigned
chars into an int.
No problem there, except that:
With cin, values of 12 and 13 are skipped.
With cin, in binary mode everything reads as 0;
with fgetc, fread, and fscanf values of 13 are skipped.
as u can imagine missing data really messes things up.
How can I read this file one byte at a time without having the
functions I'm using ignore important data?
#include <iostream>
#include <fstream>
#include <vector>
#include <iterator> // #include <stream_iterator.h>
std::ifstream PicIn( "MyPic.png", std::ios_base::in|std::ios_base::binary );
if( not PicIn.is_open() ){
std::cout<<"\n ifstream open FAILED"<<std::endl;
}
// pick one
{// 1
std::vector<unsigned char> Image(
std::istreambuf_iterator<char>( PicIn.rdbuf() ),
std::istreambuf_iterator<char>() );
}// 1
// or:
{// 2
std::vector<unsigned char> Image;
std::copy(
std::istreambuf_iterator<char>( PicIn.rdbuf() ),
std::istreambuf_iterator<char>(),
std::back_inserter( Image ) );
}// 2
// or:
{// 3
std::vector<unsigned char> Image;
while( PicIn.peek() != EOF ){
Image.push_back( PicIn.get() );
}
}// 3
// or:
{// 4 int
std::vector<int> Image;
while( PicIn.peek() != EOF ){
Image.push_back( int( PicIn.get() ) ); // int() for illustration.
}
}// 4
--
Bob R
POVrookie