png_write_png

今回は、libpngを試す。

https://refspecs.linuxbase.org/LSB_3.1.0/LSB-Desktop-generic/LSB-Desktop-generic/libpng12.png.write.png.1.html
libpng 1.2.5 manual
PNG ƒCƒ[ƒW‚ÌŽæ‚舵‚¢
libpngのインストールとC言語での使用方法・使用例 | だえうホームページ

まず、yum search。

$ yum search libpng
Fedora Modular 29 - x86_64                      446 kB/s | 1.5 MB     00:03    
Fedora Modular 29 - x86_64 - Updates            526 kB/s | 2.1 MB     00:04    
Fedora 29 - x86_64 - Updates                    1.7 MB/s |  30 MB     00:17    
Fedora 29 - x86_64                              1.7 MB/s |  62 MB     00:36    
============================ 名前 完全一致: libpng =============================
libpng.i686 : A library of functions for manipulating PNG image format files
libpng.x86_64 : A library of functions for manipulating PNG image format files
=========================== 概要 & 名前 一致: libpng ===========================
mingw32-libpng.noarch : MinGW Windows Libpng library
mingw64-libpng.noarch : MinGW Windows Libpng library
libpng12-devel.i686 : Development files for libpng 1.2
libpng12-devel.x86_64 : Development files for libpng 1.2
libpng10.i686 : Old version of libpng, needed to run old binaries
libpng10.x86_64 : Old version of libpng, needed to run old binaries
libpng10-devel.i686 : Development tools for version 1.0 of libpng
libpng10-devel.x86_64 : Development tools for version 1.0 of libpng
libpng12.i686 : Old version of libpng, needed to run old binaries
libpng12.x86_64 : Old version of libpng, needed to run old binaries
libpng15.i686 : Old version of libpng, needed to run old binaries
libpng15.x86_64 : Old version of libpng, needed to run old binaries
mingw32-libpng-static.noarch : Static version of MinGW Windows Libpng library
mingw64-libpng-static.noarch : Static version of MinGW Windows Libpng library
============================== 名前 一致: libpng ===============================
libpng-devel.i686 : Development tools for programs to manipulate PNG image
                  : format files
libpng-devel.x86_64 : Development tools for programs to manipulate PNG image
                    : format files
libpng-tools.x86_64 : Tools for PNG image format file library
libpng-static.i686 : Static PNG image format file library
libpng-static.x86_64 : Static PNG image format file library
$

で、yum install。

$ sudo yum install libpng libpng-devel
[sudo] bg1 のパスワード:
メタデータの期限切れの最終確認: x:xx:xx 時間前の xxxx年xx月xx日 xx時xx分xx秒 に実施しました。
パッケージ libpng-2:1.6.34-6.fc29.x86_64 は既にインストールされています。
パッケージ libpng-devel-2:1.6.34-6.fc29.x86_64 は既にインストールされています。
依存関係が解決しました。
行うべきことはありません。
完了しました!
$

まあ、入ってるよね。
libjpegの時のビットマップ処理関数も使って、

png_write_pngで書き込む。
これは高水準APIらしい。
下から上に入れるところと、RGBじゃなくてBGRというところがポイント。

$ ls
bitmap.c  bitmap.h  main  main.c  test.bmp
$ vi main.c
$ gcc -o main main.c bitmap.c -lpng
$ ./main
$ ls
bitmap.c  bitmap.h  main  main.c  test.bmp  test.png
$

とすると、

BMP形式からPNG形式に変換できた。
BMP形式からPNG形式に変換できた。

BMP形式からPNG形式に変換できた。
(粗いのは、libjpegのjpeg_start_decompressの項で生成したbmpファイルだから。)

Sample/libpng/png_write_png/png_write_png/src/png_write_png at master · bg1bgst333/Sample · GitHub