前提・実現したいこと
C#で2つの画像を正しく合成したい
発生している問題・エラーメッセージ
2つの画像をドラッグ&ドロップして左右に合成されるプログラムを製作。
大抵の画像データは正しく合成されるが一部データは正しく合成されない。
合成画像に黒い部分が出てしまう。
該当のソースコード
c#
1using System; 2using System.Collections.Generic; 3using System.ComponentModel; 4using System.Data; 5using System.Drawing; 6using System.Linq; 7using System.Text; 8using System.Threading.Tasks; 9using System.Windows.Forms; 10 11namespace WindowsFormsApp1 12{ 13 public partial class Form1 : Form 14 { 15 public Form1() 16 { 17 InitializeComponent(); 18 } 19 20 private void label1_DragDrop(object sender, DragEventArgs e) 21 { 22 string[] files = (string[])e.Data.GetData(DataFormats.FileDrop, false); 23 if (files.Count() < 2) return; 24 Bitmap left = new Bitmap(files[0]); 25 Bitmap right = new Bitmap(files[1]); 26 Bitmap synthesis = new Bitmap(left.Width + right.Width, left.Height); 27 28 // 画像を合成 29 Graphics g = Graphics.FromImage(synthesis); 30 g.DrawImage(left, new Point(0, 0)); 31 g.DrawImage(right, new Point(left.Width, 0)); 32 g.Dispose(); 33 left.Dispose(); 34 right.Dispose(); 35 36 string dir = System.IO.Path.GetDirectoryName(files[0]); 37 string file = dir + "\C"; 38 string ext = System.IO.Path.GetExtension(files[0]); 39 40 if (ext == ".jpg" || ext == ".jpeg") 41 synthesis.Save(file + ext, System.Drawing.Imaging.ImageFormat.Jpeg); 42 else 43 synthesis.Save(file + ext, System.Drawing.Imaging.ImageFormat.Png); 44 45 } 46 47 private void label1_DragEnter(object sender, DragEventArgs e) 48 { 49 if (e.Data.GetDataPresent(DataFormats.FileDrop)) e.Effect = DragDropEffects.All; 50 else e.Effect = DragDropEffects.None; 51 } 52 } 53} 54
試したこと
上記ソースコードはlabel1を貼り付けてAllowDropプロパティをtrue、DragDrop、DragEnterイベントを追加したものです。
Bitmap synthesis = new Bitmap(left.Width + right.Width, left.Height);
までは正しく動作していることを確認しました。
// 画像を合成
Graphics g = Graphics.FromImage(synthesis);
g.DrawImage(left, new Point(0, 0));
g.DrawImage(right, new Point(left.Width, 0));
に問題があるのだと思うのですが原因が分かりません。
補足情報
画像データに問題があると思いますので問題の画像データをアップします。
A.jpgとB.jpgを合成するとC.jpgができます。
A.jpg
B.jpg
C.jpg
回答1件
あなたの回答
tips
プレビュー