MochiuWiki : SUSE, EC, PCB
案内
メインページ
最近の更新
おまかせ表示
MediaWiki についてのヘルプ
ツール
リンク元
関連ページの更新状況
特別ページ
ページ情報
We ask for
Donations
検索
個人用ツール
ログイン
Toggle dark mode
名前空間
ページ
議論
表示
閲覧
ソースを閲覧
履歴を表示
C++の応用 - 画像のソースを表示
提供: MochiuWiki : SUSE, EC, PCB
←
C++の応用 - 画像
あなたには「このページの編集」を行う権限がありません。理由は以下の通りです:
この操作は、次のグループのいずれかに属する利用者のみが実行できます:
管理者
、new-group。
このページのソースの閲覧やコピーができます。
== 概要 == <br><br> == libpngライブラリ == ==== ライセンス ==== libpngライブラリは、libpngライセンス(PNG Reference Library License version 2)として提供されている。<br> <br> このライセンスは、以下に示すような特徴がある。<br> * ライブラリの出所を偽ってはならず、開発者がlibpngライブラリを開発したと主張してはならない。 * libpngライブラリを製品に使用する場合、製品のドキュメントにその旨を明記することが望まれるが、必須ではない。 * この著作権表示は、いかなるソースまたは変更されたソースの配布物からも削除または変更することはできない。 <br> ==== インストール ==== ===== パッケージ管理システムからインストールする場合 ===== # RHEL sudo dnf install libpng-devel # SUSE sudo zypper install libpng16-devel <br> ===== ソースコードからインストールする場合 ===== libpngライブラリのビルドに必要なライブラリをインストールする。<br> # RHEL sudo dnf install gawk make gcc gcc-c++ zlib-devel \ cmake # CMakeを使用する場合 # SUSE sudo zypper install gawk make gcc gcc-c++ zlib-devel \ cmake # CMakeを使用する場合 <br> [https://github.com/pnggroup/libpng libpngライブラリのGithub]にアクセスして、ソースコードをダウンロードする。<br> ダウンロードしたファイルを解凍する。<br> tar xf libpng-<バージョン> cd libpng-<バージョン> <br> libpngライブラリをビルドおよびインストールする。<br> mkdir build && cd build # Configureスクリプトを使用する場合 ../configure --prefix=<libpngライブラリのインストールディレクトリ> make -j $(nproc) make install # CMakeを使用する場合 cmake -DCMAKE_INSTALL_PREFIX=<libpngライブラリのインストールディレクトリ> -DCMAKE_BUILD_TYPE=Release .. make -j $(nproc) make install <br> ==== 使用例 ==== 以下の例では、libpngライブラリを使用してPPM形式の画像をPNG形式に変換している。<br> PPM形式の画像がシンプルなP6形式 (バイナリ形式) であり、RGBカラーを持つと仮定している。<br> <syntaxhighlight lang="c++"> #include <iostream> #include <fstream> #include <vector> #include <stdexcept> #include <png.h> // PPM画像の読み込み std::vector<unsigned char> readPPM(const std::string& filename, int& width, int& height) { std::ifstream file(filename, std::ios::binary); if (!file) { throw std::runtime_error("File opening failed: " + filename); } std::string line; std::getline(file, line); // PPMタイプを読み込む if (line.substr(0, 2) != "P6") { throw std::runtime_error("Invalid PPM format (must be 'P6')"); } // コメントをスキップ do { std::getline(file, line); } while (line[0] == '#'); std::stringstream ss(line); ss >> width >> height; file.ignore(256, '\n'); // 最大値を読み飛ばす std::vector<unsigned char> img(3 * width * height); file.read(reinterpret_cast<char*>(img.data()), img.size()); return img; } // PNGファイルの作成 void writePNG(const std::string &filename, const std::vector<unsigned char> &img, int width, int height) { FILE* fp = fopen(filename.c_str(), "wb"); if (!fp) { throw std::runtime_error("File opening failed: " + filename); } png_structp png_ptr = png_create_write_struct(PNG_LIBPNG_VER_STRING, nullptr, nullptr, nullptr); if (!png_ptr) { fclose(fp); throw std::runtime_error("Failed to create PNG write structure"); } png_infop info_ptr = png_create_info_struct(png_ptr); if (!info_ptr) { png_destroy_write_struct(&png_ptr, nullptr); fclose(fp); throw std::runtime_error("Failed to create PNG info structure"); } if (setjmp(png_jmpbuf(png_ptr))) { png_destroy_write_struct(&png_ptr, &info_ptr); fclose(fp); throw std::runtime_error("Error during PNG creation"); } png_init_io(png_ptr, fp); png_set_IHDR(png_ptr, info_ptr, width, height, 8, PNG_COLOR_TYPE_RGB, PNG_INTERLACE_NONE, PNG_COMPRESSION_TYPE_BASE, PNG_FILTER_TYPE_BASE); png_write_info(png_ptr, info_ptr); for (int y = 0; y < height; y++) { png_write_row(png_ptr, img.data() + y * width * 3); } png_write_end(png_ptr, nullptr); fclose(fp); png_destroy_write_struct(&png_ptr, &info_ptr); } int main() { try { const std::string ppmFilename = "input.ppm"; const std::string pngFilename = "output.png"; int width = 0, height = 0; // PPM形式の画像を読み込む auto img = readPPM(ppmFilename, width, height); // PNG形式の画像を作成する writePNG(pngFilename, img, width, height); } catch (const std::exception& e) { std::cerr << "Error: " << e.what() << std::endl; return -1; } return 0; } </syntaxhighlight> <br> libpngライブラリをアプリケーションで使用する例については、example.cファイルおよびpngtest.cファイルを参照する。<br> libpngライブラリの使用方法や制限事項については、png.hファイルを参照する。<br> zlib (libpngが使用する圧縮ライブラリ) の使用に関する説明とzlibの制限事項については、zlib.hファイルを参照する。<br> <br><br> __FORCETOC__ [[カテゴリ:C++]]
C++の応用 - 画像
に戻る。
案内
メインページ
最近の更新
おまかせ表示
MediaWiki についてのヘルプ
ツール
リンク元
関連ページの更新状況
特別ページ
ページ情報
We ask for
Donations
Collapse