|
分類:[C#]
当方、Visual Studio Community 2017でc#を用いて書いているものです。
昔windowsフォームで作った簡易画像変換ソフトを、WPFで作り直そうとしているのですが、画像処理についてイマイチ分からないため質問させていただます。
string files = ((string[])e.Data.GetData(DataFormats.FileDrop))[0]; string name = Path.GetFileNameWithoutExtension(files); string directory = Path.GetDirectoryName(files);
Bitmap bmp = new Bitmap(files); float hRes = bmp.HorizontalResolution; float vRes = bmp.VerticalResolution;
Bitmap dst = new Bitmap(bmp.Width, bmp.Height, System.Drawing.Imaging.PixelFormat.Format48bppRgb); dst.SetResolution(hRes, vRes);
Graphics gfx = Graphics.FromImage(dst); gfx.DrawImage(bmp, 0, 0, bmp.Width, bmp.Height); dst.Save(directory + "\\" + name + ".bmp", ImageFormat.Bmp);
このDrawing.Imagingで書かれたプログラムと同じ動きをImaging.BitmapSourceで書きたいのですが記述方法がイマイチわかりません。 (参照してDrawing.Imagingの利用はしない方針を取っています)
var uri = new Uri(files, UriKind.Relative); var bitmap = new BitmapImage(uri);
using (var fs = new FileStream(directory + "\\" + name + ".bmp", FileMode.Create)) { BitmapEncoder encoder = new BmpBitmapEncoder(); encoder.Frames.Add(BitmapFrame.Create(bitmap)); encoder.Save(fs); }
と書いて一応動くには動くのですが、アルファチャンネルを含んでいるpng→bmpとした場合、おかしくなります。
記述方法はこれで問題ないのでしょうか?また、アルファチャンネルの部分は真っ白or真っ黒にする、のような動作はどうすればいいのでしょうか?
|