質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Q&A

解決済

1回答

2256閲覧

C#で画像を横に指定個数横に連結させたら改行して2列目に横に連結させたい。

Kuro515

総合スコア25

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

0グッド

0クリップ

投稿2020/11/14 13:14

編集2020/11/14 13:20

C#で打ち込んだひらがな一字一字を暗号の画像に置き換えるアプリを作っています。

そこで、画像を指定個数(今回は10個)横に連結させたら2列目につなげていくようにしたいです。

C#

1public partial class Form1 : Form 2{ 3 Bitmap ArrangeImage(string[] paths) 4 { 5 List<Image> images = new List<Image>(); 6 foreach(var path in paths) 7 { 8 images.Add(Image.FromFile(path)); 9 } 10 int maxHieght = images.Max(x => x.Height); 11 12 List<Rectangle> rects = new List<Rectangle>(); 13 int px = 0; 14 foreach (var img in images) 15 { 16 int newHeight = img.Height * maxHieght / img.Height; 17 int newWidth = img.Width * maxHieght / img.Height; 18 rects.Add(new Rectangle(px, 0, newWidth, newHeight)); 19 px += newWidth; 20 } 21 int width = rects.Sum(x => x.Width); 22 23 Bitmap bmp = new Bitmap(width, maxHieght); 24 Graphics g = Graphics.FromImage(bmp); 25 26 for (int i = 0; i < rects.Count; i++) 27 { 28 g.DrawImage(images[i], rects[i]); 29 } 30 g.Dispose(); 31 foreach (var img in images) 32 { 33 img.Dispose(); 34 } 35 return bmp; 36 } 37 38 private void button1_Click(object sender, EventArgs e) 39 { 40 List<string> paths = new List<string>(); 41 42 for(int i = 0; i < 20; i++){ 43 paths.Add(textBox1.Text); 44 paths.Add(textBox2.Text); 45 paths.Add(textBox3.Text); 46 } 47 try 48 { 49 Bitmap bmp = ArrangeImage(paths.ToArray()); 50 bmp.Save(@"D:\output.jpg", System.Drawing.Imaging.ImageFormat.Jpeg); 51 bmp.Dispose(); 52 } 53 catch 54 { 55 MessageBox.Show("失敗しました"); 56 } 57 } 58}

このサイト様から引用

つまり、1列目に右に画像を10個連結させたら11個目からは2列目に右に連結させていきたいです。

どうしたらいいのでしょうか?

ご教授願います。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

引用元サイト「鳩でも分かるC#」の管理人です。

指定個数連結させる画像の縦横のサイズは同じでしょうか?
もし同じであれば、

List<string> paths = new List<string>(); paths.Add(@"画像のパス"); paths.Add(@"画像のパス"); // 10個でも20個でも好きなだけ追加する Image img = Image.FromFile(paths[0]); int width = img.Width * 10; int height = paths.Count / 10 * img.Height; if(paths.Count % 10 != 0) height += img.Height; img.Dispose(); Bitmap bitmap = new Bitmap(width, height); //すべての画像の大きさが同じという前提になっている。 //違う場合は適切な値を考えないといけない Graphics g = Graphics.FromImage(bitmap); int cnt = 0; foreach(string path in paths) { Image image = Image.FromFile(path); int x = (cnt % 10) * image.Width; int y = cnt / 10 * image.Height; g.DrawImage(image, new Point(x, y)); image.Dispose(); cnt++; } g.Dispose(); bitmap.Save(@"画像を保存したいパスを指定する", System.Drawing.Imaging.ImageFormat.Png); bitmap.Dispose();

これで可能です。動作確認もしました。

投稿2020/11/19 13:47

hatodemowakaru

総合スコア7

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問