| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394 |
- /**
- * PANDA 3D SOFTWARE
- * Copyright (c) Carnegie Mellon University. All rights reserved.
- *
- * All use of this software is subject to the terms of the revised BSD
- * license. You should have received a copy of this license along
- * with this source code in a file named "LICENSE."
- *
- * @file imageInfo.cxx
- * @author drose
- * @date 2003-03-13
- */
- #include "imageInfo.h"
- #include "pnmImageHeader.h"
- /**
- *
- */
- ImageInfo::
- ImageInfo() {
- set_program_brief("report the size of image files");
- set_program_description
- ("This program reads the headers of a series of one or more "
- "image files and reports the image sizes to standard output.");
- add_option
- ("2", "", 0,
- "Report only images that have a non-power-of-two size in either "
- "dimension. Images whose dimensions are both a power of two will "
- "not be mentioned.",
- &ImageInfo::dispatch_none, &_report_power_2, nullptr);
- }
- /**
- *
- */
- void ImageInfo::
- run() {
- Args::const_iterator ai;
- for (ai = _filenames.begin(); ai != _filenames.end(); ++ai) {
- Filename filename = (*ai);
- PNMImageHeader header;
- if (!header.read_header(filename)) {
- // Could not read the image header.
- if (filename.exists()) {
- nout << filename << ": could not read image.\n";
- } else {
- nout << filename << ": does not exist.\n";
- }
- } else {
- // Successfully read the image header.
- if (!_report_power_2 ||
- !is_power_2(header.get_x_size()) ||
- !is_power_2(header.get_y_size())) {
- nout << filename << ": " << header.get_x_size() << " x "
- << header.get_y_size() << " x " << header.get_num_channels()
- << " (maxval = " << header.get_maxval() << ")\n";
- }
- }
- }
- }
- /**
- * Does something with the additional arguments on the command line (after all
- * the -options have been parsed). Returns true if the arguments are good,
- * false otherwise.
- */
- bool ImageInfo::
- handle_args(ProgramBase::Args &args) {
- if (args.empty()) {
- nout << "List one or more image filenames on command line.\n";
- return false;
- }
- _filenames = args;
- return true;
- }
- /**
- * Returns true if the indicated value is a power of 2, false otherwise.
- */
- bool ImageInfo::
- is_power_2(int value) const {
- return (value & (value - 1)) == 0;
- }
- int main(int argc, char *argv[]) {
- ImageInfo prog;
- prog.parse_command_line(argc, argv);
- prog.run();
- return 0;
- }
|