前提・実現したいこと
C#を用いてそれぞれの画像のピクセルごとの平均値を求めることによって画像を平均化したい。
発生している問題・エラーメッセージ
GetPixelやSetPixelが使えない。また、Listの細かい使い方が分からない。
エラーメッセージ ```ListBoxにGetPixelの定義が含まれておらず、型ListBoxの最初の引数を受け付ける拡張メソッドGetPixelが見つかりませんでした。 ### 該当のソースコード ```C# ソースコード using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; using System.IO; namespace PBL3 { public partial class Form1 : Form { public Form1() { InitializeComponent(); } #region 読み込みボタン private void btnRead_Click(object sender, EventArgs e) { FolderBrowserDialog fbd = new FolderBrowserDialog(); if (fbd.ShowDialog() == DialogResult.OK) { string dir=System.IO.Path.GetFullPath(fbd.SelectedPath); string[] extension = new string[] { "*.jpeg", "*.bmp", "*.png" }; foreach(string ext in extension) { lbxImage.Items.AddRange(System.IO.Directory.GetFiles(dir, ext, SearchOption.AllDirectories)); } lbxImage.Sorted = true; } } #endregion #region サイズ判定関数 private Boolean FuncSize(Bitmap bitSource,int ref_X,int ref_Y) { if ((bitSource.Width == ref_X) && (bitSource.Height == ref_Y)) { return true; } else { return false; } } #endregion #region 平均化ボタン private void btnAve_Click(object sender, EventArgs e) { Bitmap bmpRef = new Bitmap(lbxImage.Items[0].ToString()); List<Bitmap> bmpList = new List<Bitmap>(); for(int i = 0; i < lbxImage.Items.Count; i++) { if(FuncSize(new Bitmap(lbxImage.Items[i].ToString()), bmpRef.Width, bmpRef.Height)) { bmpList.Add(new Bitmap(lbxImage.Items[i].ToString())); } } pbxDisp.Image = FuncAverage(bmpList); } #endregion #region 保存ボタン private void btnSave_Click(object sender, EventArgs e) { if (pbxDisp.Image == null) { MessageBox.Show("画像を読み込んでください"); return; } SaveFileDialog sdf = new SaveFileDialog(); sdf.Filter = "bmpファイル(*.bmp)|*.bmp"; if (sdf.ShowDialog() == DialogResult.OK) { pbxDisp.Image.Save(sdf.FileName); MessageBox.Show("保存完了"); } //tbxComment.Text = "保存が終わりました"; } #endregion #region 平均画像を求める関数 private Bitmap FuncAverage(List<Bitmap> bmpImage) { Bitmap bmpResult = new Bitmap(lbxImage.Items[0].ToString()); for (int i = 0; i < lbxImage.Width; i++) { for(int j = 0; j < lbxImage.Height; j++) { for (int k=0; k < lbxImage.Items.Count;k++) { int Red = lbxImage.Items[k].GetPixel(i, j).R; int Green = lbxImage.GetPixel(i, j).G; int Blue = lbxImage.GetPixel(i, j).B; lbxImage.SetPixel(i, j, Color.FromArgb((int)Red, (int)Blue, (int)Green)); } } } return bmpResult; } private void listBox1_SelectedIndexChanged(object sender, EventArgs e) { } } }
試したこと
lbxImagesの後ろにItems[k]を追加したが、エラー内容の対象がListBoxからobjectに変わっただけだった。
補足情報(FW/ツールのバージョンなど)
該当部分以外にも間違っている部分があるかもしれません。