<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ja">
	<id>http://mochiuwiki.e2.valueserver.jp/index.php?action=history&amp;feed=atom&amp;title=C%2B%2B%E3%81%AE%E5%BF%9C%E7%94%A8_-_%E7%94%BB%E5%83%8F</id>
	<title>C++の応用 - 画像 - 版の履歴</title>
	<link rel="self" type="application/atom+xml" href="http://mochiuwiki.e2.valueserver.jp/index.php?action=history&amp;feed=atom&amp;title=C%2B%2B%E3%81%AE%E5%BF%9C%E7%94%A8_-_%E7%94%BB%E5%83%8F"/>
	<link rel="alternate" type="text/html" href="http://mochiuwiki.e2.valueserver.jp/index.php?title=C%2B%2B%E3%81%AE%E5%BF%9C%E7%94%A8_-_%E7%94%BB%E5%83%8F&amp;action=history"/>
	<updated>2026-09-08T14:21:08Z</updated>
	<subtitle>このウィキのこのページに関する変更履歴</subtitle>
	<generator>MediaWiki 1.43.6</generator>
	<entry>
		<id>http://mochiuwiki.e2.valueserver.jp/index.php?title=C%2B%2B%E3%81%AE%E5%BF%9C%E7%94%A8_-_%E7%94%BB%E5%83%8F&amp;diff=9638&amp;oldid=prev</id>
		<title>Wiki: /* ソースコードからインストールする場合 */</title>
		<link rel="alternate" type="text/html" href="http://mochiuwiki.e2.valueserver.jp/index.php?title=C%2B%2B%E3%81%AE%E5%BF%9C%E7%94%A8_-_%E7%94%BB%E5%83%8F&amp;diff=9638&amp;oldid=prev"/>
		<updated>2024-02-29T13:54:18Z</updated>

		<summary type="html">&lt;p&gt;&lt;span class=&quot;autocomment&quot;&gt;ソースコードからインストールする場合&lt;/span&gt;&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;ja&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← 古い版&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;2024年2月29日 (木) 22:54時点における版&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l43&quot;&gt;43行目:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;43行目:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;   &lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;   &lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;  # CMakeを使用する場合&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;  # CMakeを使用する場合&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;  cmake -DCMAKE_INSTALL_PREFIX=&amp;lt;libpngライブラリのインストールディレクトリ&amp;gt; -DCMAKE_BUILD_TYPE=Release ..&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;  cmake -DCMAKE_INSTALL_PREFIX=&amp;lt;libpngライブラリのインストールディレクトリ&amp;gt; -DCMAKE_BUILD_TYPE=Release  &lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;       -DPNG_TOOLS=ON \  # libpngライブラリのツール群をインストールする場合&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;       &lt;/ins&gt;..&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;  make -j $(nproc)&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;  make -j $(nproc)&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;  make install&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;  make install&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>Wiki</name></author>
	</entry>
	<entry>
		<id>http://mochiuwiki.e2.valueserver.jp/index.php?title=C%2B%2B%E3%81%AE%E5%BF%9C%E7%94%A8_-_%E7%94%BB%E5%83%8F&amp;diff=9632&amp;oldid=prev</id>
		<title>Wiki: ページの作成:「== 概要 == &lt;br&gt;&lt;br&gt;  == libpngライブラリ == ==== ライセンス ==== libpngライブラリは、libpngライセンス（PNG Reference Library License version 2）として提供されている。&lt;br&gt; &lt;br&gt; このライセンスは、以下に示すような特徴がある。&lt;br&gt; * ライブラリの出所を偽ってはならず、開発者がlibpngライブラリを開発したと主張してはならない。 * libpngライブラリを製品に使用する…」</title>
		<link rel="alternate" type="text/html" href="http://mochiuwiki.e2.valueserver.jp/index.php?title=C%2B%2B%E3%81%AE%E5%BF%9C%E7%94%A8_-_%E7%94%BB%E5%83%8F&amp;diff=9632&amp;oldid=prev"/>
		<updated>2024-02-29T10:01:40Z</updated>

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