作ってみたWinFromの時代には、System.Drawing.Bitmapクラスがあってそのクラスには、1ドットごとに色を指定して絵を描くことができるSetPixel関数が付いていました。一応、「WriteableBitmap」というクラスがあるのですがちょっと操作感が求めてるのと違います。あとちょっとパフォーマンスが悪いので自分で自作することにしました。自分でBitmapを作成して1ドットずつ点描しつつ、SetPixel・GetPixel操作ができるたくなる時があります。そこで、そういった操作が実現できるようにクラスを自作しようと思います。余談ですが、以下の自作の実装は余計な処理がない分動作が軽いので極めてパフォーマンスが良いです。基底クラスを作成する画像の形式が色々あるため(RBG24とかARGB形式とか)それらに派生クラスで対応したいので、まず、SetPixelとGetPixelメソッド(+派生クラスで定義してほしい機能)をまとめた基底クラスとして「ImageBuffer」を宣言します。ここに画像の取り扱いの規約などを記述していきます。以下コードを書く前にプロジェクトのアセンブリ参照に以下をを追加します。画像バッファーのサイズを指定してオブジェクトを初期化します。指定した座標の色を更新します。指定した位置へ色を取得します。現在のバッファーを取得します。バッファーの1行の長さの計算方法を実装します。バッファーの各ピクセルにアクセスするためにインデックスの計算方法を実装します。全ピクセルを列挙して述語による処理を行います。現在のオブジェクトの内容を指定した位置へ保存します。encoderを指定しない場合PNG形式で保存します。}}また、上記オブジェクトのから画像をファイルに保存するための機能をUtilityに抜き出しておきます。WPFのImage関係の汎用操作を提供します。現在のオブジェクトの内容を指定した位置へ保存します。encoderを指定しない場合PNG形式で保存します。}}画像を管理するクラスを作成するで、肝心の画像を扱うクラスですが、RGB24という形式(透過無しの3原色のみ)で画像を管理する「Rgb24ImageBuffer」クラスを作成したいと思います。8bitずつStreamに並んで24ビットの形式です。先述の基底クラスを継承して作成します。透過色を含まないRGB24形式の画像バッファーを表します。画像バッファーのサイズを指定してオブジェクトを初期化します。指定した位置へ色を設定します。指定した位置へ色を設定します。}}透過を扱うクラスを作成する画像によっては透過色を扱いたい場合があるので、上記のクラスのほかに、透過を扱うためのArgbImageBufferクラスを作成します。このクラスでは、赤、青、緑の3色と透過を含む4つの色を管理します。透過色を含むRGBA形式の画像バッファを表します。画像バッファーのサイズを指定してオブジェクトを初期化します。指定した座標の色を更新します。指定した位置へ色を取得します。RGB32のRawStrideを計算します。使い方ですが、上記のバッファークラスにSetPixelメソッドが付いているので1ドットずつX,Y座標と色を指定してきます。試しに全面を黒に塗りつぶして等間隔に灰色の縦線を描画したBitmapを表示したいと思います。先に実行結果を張っておきます。コードですが、ImageクラスのSourceプロパティにSetPixelしたBitmapを指定する場合の使い方は以下の通りです。画面の見た目にMahAppsを使用しています。使用方法はサイトを確認してください。</StackPanel></Controls:MetroWindow>コードビハインド側で画像クラスの使い方の説明を兼ねた画像の作成を行います。}}マジで肝心なのが、バッファーからToImageSource()の箇所です。このコードだけで値千金だと思います。40);」のように透過を指定したColorクラスとしてオブジェクトを作成します。余談ですが、バッファーからブラシを作成して、MainWindowの背景に設定する場合以下のように記述します。brush;おまけこれをやっちゃあ、上記クラスを自作した意味がかなり薄くなるのですが、このバッファーを画像ファイルから作成するユーティリティです。System.Drawing.Bitmapを使ってファイルから画像を読み取ってバッファーに移し替えています。WPFのImageSourceやImageBrushと、SystemDrawing.Bitmapの間を埋めるためにバッファーを使うという意味では正しいのかもしれませんが、、、あとRgb24BufferクラスのSetPixelhは余計な処理がないためBitmapの操作より結構軽いと思います。画像操作に関する汎用処理を提供します。指定したファイルパスからバッファーを作成します。}}あとは、自分で好きなようにSetPixelして画像を書いてください。最後に成果物をGithubへアップしています。よかったら参考にしてください。»Profile受託ソフト会社員でWin系業務屋。趣味でCocos2d-x/C++を触っています。etc...主に受託・開発ネタ、Windowsの事、Srellaris、ゲーム制作の進捗の事を喋ります。ArticleC#で2次元配列を管理するクラスを作成する【C#】2次元配列から2次元配列を切り出すC#でオブジェクト初期化子を使った時の丸カッコの有無DOTweenのアニメーションをTimeLineでプレビューするC#の配列をインデックス付きforeachするスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。