プログラミング素人のはてなブログ

プログラミングも電気回路も専門外の技術屋の末端が勉強したことや作品をアウトプットするブログ。コードに間違いなど見つけられたら、気軽にコメントください。 C#、Python3、ラズパイなど。

画像処理ソフトEasyRetouchの改良

s51517765.hatenadiary.jp
s51517765.hatenadiary.jp
s51517765.hatenadiary.jp

自作の画像処理ソフト「EasyRetouch」ですが、これまでは画像サイズを一律に900 x 900px以下に縮小していました。
これはもともと編集内容がPC画面内で表示できるサイズ、を基準としていました。
しかし、画像によってはもう少し解像度がほしい、という場合があり出力画像サイズを可変にできるようにしました。

画像サイズの変更は以下のようにすることで出来ます。

canvas2 = new Bitmap(canvas0, (int)(Size-X), (int)(Size-Y));
canvas2.Save(FileName);

縮小するときはこれでいいのですが、この関数で拡大した場合は当然画質が荒くなってしまいます。
もともと、Canvasを等倍でpictureBoxに表示ししながら画像を編集していましたが、表示した画像を最後に画質を上げる、ということはできません。(不可逆圧縮のため)
つまり、最終的に必要な画質(解像度)は編集中にそれ以上の解像度を保っていなければなりません。
しかしながら、それではPCの画面からはみ出してしまうので編集には不向きです。(画像の一部分しか表示されないか大きなモニターが必要)

解決策

以下のようにすることで実現できました。
・画像編集用の大きいCanvas(3600 x 3600 px)を保持
・PictureBox表示用のCanvas1(900 x 900 px)をCanvasの縮小処理したものとして保持
・最終出力はCanvasを任意の大きさに縮小したCanvas2をいったん作成し保存。

f:id:s51517765:20210306182416p:plain

github.com