Fix netpbm parsing
This commit is contained in:
parent
631a720e56
commit
d40ec7c0ca
1 changed files with 24 additions and 1 deletions
|
|
@ -34,12 +34,16 @@ namespace psemek::gfx
|
||||||
fail("P1 format is not supported");
|
fail("P1 format is not supported");
|
||||||
|
|
||||||
std::getline(is, line);
|
std::getline(is, line);
|
||||||
|
if (!is)
|
||||||
|
fail("stream error");
|
||||||
std::istringstream sline(line);
|
std::istringstream sline(line);
|
||||||
|
|
||||||
std::size_t width, height;
|
std::size_t width, height;
|
||||||
pixmap_monochrome pixmap;
|
pixmap_monochrome pixmap;
|
||||||
|
|
||||||
sline >> width >> height;
|
sline >> width >> height;
|
||||||
|
if (!sline)
|
||||||
|
fail("stream error");
|
||||||
|
|
||||||
pixmap.resize({width, height});
|
pixmap.resize({width, height});
|
||||||
|
|
||||||
|
|
@ -89,6 +93,8 @@ namespace psemek::gfx
|
||||||
fail("unknown format " + line);
|
fail("unknown format " + line);
|
||||||
|
|
||||||
std::getline(is, line);
|
std::getline(is, line);
|
||||||
|
if (!is)
|
||||||
|
fail("stream error");
|
||||||
std::istringstream sline(line);
|
std::istringstream sline(line);
|
||||||
|
|
||||||
std::size_t width, height;
|
std::size_t width, height;
|
||||||
|
|
@ -96,10 +102,17 @@ namespace psemek::gfx
|
||||||
pixmap_monochrome pixmap;
|
pixmap_monochrome pixmap;
|
||||||
|
|
||||||
sline >> width >> height;
|
sline >> width >> height;
|
||||||
|
if (!sline)
|
||||||
|
fail("stream error");
|
||||||
|
|
||||||
std::getline(is, line);
|
std::getline(is, line);
|
||||||
|
if (!is)
|
||||||
|
fail("stream error");
|
||||||
|
sline.clear();
|
||||||
sline.str(line);
|
sline.str(line);
|
||||||
sline >> max;
|
sline >> max;
|
||||||
|
if (!sline)
|
||||||
|
fail("stream error");
|
||||||
|
|
||||||
if (max != 255)
|
if (max != 255)
|
||||||
fail("max value " + std::to_string(max) + " is not supported");
|
fail("max value " + std::to_string(max) + " is not supported");
|
||||||
|
|
@ -117,7 +130,7 @@ namespace psemek::gfx
|
||||||
return pixmap;
|
return pixmap;
|
||||||
}
|
}
|
||||||
|
|
||||||
pixmap_rgb load_ppm(std::istream & is)
|
pixmap_rgb read_ppm(std::istream & is)
|
||||||
{
|
{
|
||||||
auto fail = [](std::string str)
|
auto fail = [](std::string str)
|
||||||
{
|
{
|
||||||
|
|
@ -141,6 +154,8 @@ namespace psemek::gfx
|
||||||
fail("unknown format " + line);
|
fail("unknown format " + line);
|
||||||
|
|
||||||
std::getline(is, line);
|
std::getline(is, line);
|
||||||
|
if (!is)
|
||||||
|
fail("stream error");
|
||||||
std::istringstream sline(line);
|
std::istringstream sline(line);
|
||||||
|
|
||||||
std::size_t width, height;
|
std::size_t width, height;
|
||||||
|
|
@ -149,9 +164,17 @@ namespace psemek::gfx
|
||||||
|
|
||||||
sline >> width >> height;
|
sline >> width >> height;
|
||||||
|
|
||||||
|
if (!sline)
|
||||||
|
fail("stream error");
|
||||||
|
|
||||||
std::getline(is, line);
|
std::getline(is, line);
|
||||||
|
if (!is)
|
||||||
|
fail("stream error");
|
||||||
|
sline.clear();
|
||||||
sline.str(line);
|
sline.str(line);
|
||||||
sline >> max;
|
sline >> max;
|
||||||
|
if (!sline)
|
||||||
|
fail("stream error");
|
||||||
|
|
||||||
if (max != 255)
|
if (max != 255)
|
||||||
fail("max value " + std::to_string(max) + " is not supported");
|
fail("max value " + std::to_string(max) + " is not supported");
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue