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

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

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

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

Windows

Windowsは、マイクロソフト社が開発したオペレーティングシステムです。当初は、MS-DOSに変わるOSとして開発されました。 GUIを採用し、主にインテル系のCPUを搭載したコンピューターで動作します。Windows系OSのシェアは、90%を超えるといわれています。 パソコン用以外に、POSシステムやスマートフォンなどの携帯端末用、サーバ用のOSもあります。

Windows Forms

Windows Forms(WinForms)はMicrosoft .NET フレームワークに含まれる視覚的なアプリケーションのプログラミングインターフェイス(API)です。WinFormsは管理されているコードの既存のWindowsのAPIをラップすることで元のMicrosoft Windowsのインターフェイスのエレメントにアクセスすることができます。

.NET Framework

.NET Framework は、Microsoft Windowsのオペレーティングシステムのために開発されたソフトウェア開発環境/実行環境です。多くのプログラミング言語をサポートしています。

Q&A

1回答

2494閲覧

C# 複数画像のピクセルごとの平均値から画像を平均化する

退会済みユーザー

退会済みユーザー

総合スコア0

C#

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

Windows

Windowsは、マイクロソフト社が開発したオペレーティングシステムです。当初は、MS-DOSに変わるOSとして開発されました。 GUIを採用し、主にインテル系のCPUを搭載したコンピューターで動作します。Windows系OSのシェアは、90%を超えるといわれています。 パソコン用以外に、POSシステムやスマートフォンなどの携帯端末用、サーバ用のOSもあります。

Windows Forms

Windows Forms(WinForms)はMicrosoft .NET フレームワークに含まれる視覚的なアプリケーションのプログラミングインターフェイス(API)です。WinFormsは管理されているコードの既存のWindowsのAPIをラップすることで元のMicrosoft Windowsのインターフェイスのエレメントにアクセスすることができます。

.NET Framework

.NET Framework は、Microsoft Windowsのオペレーティングシステムのために開発されたソフトウェア開発環境/実行環境です。多くのプログラミング言語をサポートしています。

0グッド

0クリップ

投稿2021/05/10 02:54

編集2021/05/10 04:21

前提・実現したいこと

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/ツールのバージョンなど)

該当部分以外にも間違っている部分があるかもしれません。

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

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

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

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

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

退会済みユーザー

退会済みユーザー

2021/05/10 04:57 編集

ソースコードは、質問文を編集してコードの挿入(<code>のアイコン)で記入してください。 質問文からは何をどこまで理解していて、何を調査したか全く判らないのですが、クラスリファレンスや関連するWeb上のサンプルを検索してみたりはしたのでしょうか?下記URLの内容をよく読んでから質問されることをお勧めします。 [質問するときのヒント] https://teratail.com/help/question-tips
guest

回答1

0

FuncAverageにbmpImageを渡しているのに、それを使用していないから上手くいっていないのではないかと思われますが。(何故かlbxImageにアクセスしている)また、デバッグ実行で変数やプロパティの値を確認出来るので、上手くいかないときは必ず値を確認するようにしましょう。
チュートリアル: Visual Studio を使用した C# のデバッグについて理解する

あとGetPixelは遅いので、速度が要求されるならLockBitsを使用した方がよいでしょう。(速度は気にしないなら、別にGetPixelでも構いませんが)
【C#】画像にピクセル単位でアクセスする【備忘録】

クラスの仕様は、公式のクラスリファレンスを確認するようにしましょう。
List<T> クラス

投稿2021/05/10 05:04

編集2021/05/10 05:22
退会済みユーザー

退会済みユーザー

総合スコア0

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.49%

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

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

質問する

関連した質問