C#で5500x3500サイズの画像をサイズ150x150で切り抜いてPictureBoxに表示したいのですが、
もっと高速な方法はあるのでしょうか?
全部500ms近くかかってしまいます。
VisualStudio2017 C#
C#
1using System; 2using System.Collections.Generic; 3using System.ComponentModel; 4using System.Data; 5using System.Diagnostics; 6using System.Drawing; 7using System.Drawing.Imaging; 8using System.IO; 9using System.Linq; 10using System.Runtime.InteropServices; 11using System.Text; 12using System.Threading.Tasks; 13using System.Windows.Forms; 14 15 16namespace 画像読込テスト 17{ 18 public partial class Form1 : Form 19 { 20 public Form1() 21 { 22 InitializeComponent(); 23 } 24 25 private void button1_Click(object sender, EventArgs e) 26 { 27 FileStream stream = File.OpenRead(@"D:\画像5500_3500.png"); 28 Image image = Image.FromStream(stream, false, false); 29 pictureBox1.Image = image; 30 31 var sw = new System.Diagnostics.Stopwatch(); sw.Start(); 32 pictureBox2.Image = ImageRoi(new Bitmap(image), new Rectangle(3921, 833, 150, 150)); 33 sw.Stop(); Console.WriteLine($" {sw.ElapsedMilliseconds}ミリ秒"); 34 35 sw.Restart(); 36 pictureBox2.Image = ImageRoi2(new Bitmap(image), new Rectangle(3921, 833, 150, 150)); 37 sw.Stop(); Console.WriteLine($" {sw.ElapsedMilliseconds}ミリ秒"); 38 39 sw.Restart(); 40 pictureBox2.Image = ImageRoi3(new Bitmap(image), new Rectangle(3921, 833, 150, 150)); 41 sw.Stop(); Console.WriteLine($" {sw.ElapsedMilliseconds}ミリ秒"); 42 43 } 44 45 Bitmap ImageRoi(Bitmap src, Rectangle roi) 46 { 47 Bitmap dst = new Bitmap(roi.Width, roi.Height); 48 Graphics g = Graphics.FromImage(dst); 49 Rectangle srcRect = roi; 50 Rectangle dstRect = roi; 51 g.DrawImage(src, dstRect, srcRect, GraphicsUnit.Pixel); 52 g.Dispose(); 53 return dst; 54 } 55 56 public Bitmap ImageRoi2(Bitmap src, Rectangle roi) 57 { 58 Bitmap bmpNew = src.Clone(roi, src.PixelFormat); 59 return bmpNew; 60 } 61 62 static public Bitmap ImageRoi3(Bitmap sourceImage, Rectangle rectangle) 63 { 64 Bitmap src = sourceImage; 65 Bitmap target = new Bitmap(rectangle.Width, rectangle.Height); 66 using (Graphics g = Graphics.FromImage(target)) 67 { 68 g.DrawImage(src, new Rectangle(0, 0, target.Width, target.Height), rectangle, GraphicsUnit.Pixel); 69 } 70 return target; 71 } 72 } 73}
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2020/11/06 23:07