前提・実現したいこと
https://qiita.com/nkojima/items/1fb901c13f9707808bc0
unityで上記サイトの『2つの画像の差分を得る』のプログラムを実行したい。
発生している問題・エラーメッセージ
ImageComparator.cs の using System.Drawing.Imaging;でエラーが出ます。
Assets/script/ImageComparator.cs(4,22): error CS0234: The type or namespace name 'Imaging' does not exist in the namespace 'System.Drawing' (are you missing an assembly reference?)
該当のソースコード
C#
1ImageComparator.cs 2 3using System; 4using System.Collections.Generic; 5using System.Drawing; 6using System.Drawing.Imaging; 7using System.Text; 8 9namespace CSharpStudy.Image 10{ 11 /// <summary> 12 /// 「画像比較機」クラス。 13 /// </summary> 14 public class ImageComparator 15 { 16 /// <summary> 17 /// 1ピクセルずつ画像を比較して、差分の画像を返す。 18 /// </summary> 19 /// <param name="bmp1Path">比較する画像1のファイルパス。</param> 20 /// <param name="bmp2Path">比較する画像2のファイルパス。</param> 21 /// <param name="path">差分画像の保存先となるファイルパス。</param> 22 /// <returns>2つの画像が同じであればtrue、そうでなければfalseを返す。</returns> 23 public static bool Compare(string bmp1Path, string bmp2Path, string path = @".\diff_image.png") 24 { 25 bool isSame = true; 26 27 // 画像を比較する際に「大きい方の画像」のサイズに合わせて比較する。 28 Bitmap bmp1 = new Bitmap(bmp1Path); 29 Bitmap bmp2 = new Bitmap(bmp2Path); 30 int width = Math.Max(bmp1.Width, bmp2.Width); 31 int height = Math.Max(bmp1.Height, bmp2.Height); 32 33 Bitmap diffBmp = new Bitmap(width, height); // 返却する差分の画像。 34 Color diffColor = Color.Red; // 画像の差分に付ける色。 35 36 // 全ピクセルを総当りで比較し、違う部分があればfalseを返す。 37 for (int i = 0; i < width; i++) 38 { 39 for (int j = 0; j < height; j++) 40 { 41 try 42 { 43 Color color1 = bmp1.GetPixel(i, j); 44 if (color1 == bmp2.GetPixel(i, j)) 45 { 46 diffBmp.SetPixel(i, j, color1); 47 } 48 else 49 { 50 diffBmp.SetPixel(i, j, diffColor); 51 isSame = false; 52 } 53 } 54 catch 55 { 56 // 画像のサイズが違う時は、ピクセルを取得できずにエラーとなるが、ここでは「差分」として扱う。 57 diffBmp.SetPixel(i, j, diffColor); 58 isSame = false; 59 } 60 } 61 } 62 diffBmp.Save(path, ImageFormat.Png); 63 return isSame; 64 } 65 } 66}
C#
1Program.cs 2 3using System.IO; 4using CSharpStudy.Image; 5using UnityEngine; 6 7namespace CSharpStudy { 8 class Program : MonoBehaviour { 9 void Start() { 10 // Assets/Textures/one.png を使う 11 string BITMAP1_PATH = Path.Combine(Application.dataPath, "images", "CameraScreenShot.png"); 12 // Assets/Textures/two.png を使う 13 string BITMAP2_PATH = Path.Combine(Application.dataPath, "images", "CameraScreenShot2.png"); 14 // 差分画像を Assets/Texturesフォルダ に diff.png という名前で保存 15 string DIFF_IMG_PATH = Path.Combine(Application.dataPath, "images", "diff.png"); 16 //private const string BITMAP1_PATH = @"Assets/images/CameraScreenShot.png"; 17 //private const string BITMAP2_PATH = @"Assets/images/CameraScreenShot2.png"; 18 //private const string DIFF_IMG_PATH = @"Assets/images/diff_image.png"; 19 20 21 bool isSame = ImageComparator.Compare(BITMAP1_PATH, BITMAP2_PATH, DIFF_IMG_PATH); 22 23 if (isSame) { 24 Debug.Log("2つの画像は同じです。"); 25 } else { 26 Debug.Log("2つの画像は異なります。"); 27 Debug.Log("次の差分ファイルを確認してください。:" + DIFF_IMG_PATH); 28 } 29 } 30 } 31}
補足情報(FW/ツールのバージョンなど)
英語で読めませんが同じ質問(?)
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/01/11 06:20
2021/01/11 09:47 編集
2021/01/12 10:23
2021/01/13 15:47
2021/01/13 18:16 編集
2021/01/14 07:04
2021/01/14 10:23
2021/01/14 11:30
2021/01/14 13:32
2021/01/20 05:27