![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?e8efa67)
また分からないことが出来ましたので、よろしくお願いいたします。
今、openFileDialogで画像を読取、その画像の黒色を白色に変更してpicutreBoxに表示するプログラムを作成しています。
[C#]
Bitmap img = new Bitmap(openFileDialog.FileName);
Graphics g = Graphics.FromImage(img);
System.Drawing.Imaging.ColorMap[] cms =
new System.Drawing.Imaging.ColorMap[]
{new System.Drawing.Imaging.ColorMap(),
new System.Drawing.Imaging.ColorMap()};
cms[0].OldColor = Color.Black;
cms[0].NewColor = Color.White;
System.Drawing.Imaging.ImageAttributes ia =
new System.Drawing.Imaging.ImageAttributes();
ia.SetRemapTable(cms);
g.DrawImage(img, new Rectangle(img.Width + 10, 0, img.Width, img.Height),
0, 0, img.Width, img.Height, GraphicsUnit.Pixel,ia);
g.Dispose();
PictureBox1.Image = img;
という風に作成したのですが、色が変更されませんでした。
どこが違うのか分かられる方がいらっしゃいましたら、よろしくお願いいたします。
No.4ベストアンサー
- 回答日時:
色の比較が Color.Blackではうまくいかない場合があるようです
if ( img.GetPixel(x,y) == Color.FromaArgb(255,0,0,0) )
といった具合のほうがいいようです …
当方が実験したコードを記載します
Bitmap bmp = new Bitmap(255, 255);
Graphics g1;
g1 = Graphics.FromImage(bmp);
pictureBox1.Image = null;
// リニアグラデーションブラシで 黒からシアンを作成
LinearGradientBrush br = new LinearGradientBrush(
new Point(0, 128), new Point(255, 128),
Color.FromArgb(0, 0,0), Color.FromArgb(0, 255,255));
// 矩形を描画
g1.FillRectangle(br, new Rectangle(0, 0, 255, 255));
// シアンの円を2つ描画
g1.FillEllipse(new SolidBrush(Color.FromArgb(0, 128, 128)), new Rectangle(20, 20, 180, 180));
g1.FillEllipse(new SolidBrush(Color.FromArgb(0, 255, 255)), new Rectangle(40, 40, 140, 140));
g1.Dispose();
bmp.Save("sample01.jpg");
ImageAttributes ia = new ImageAttributes();
// 閾値を0.7にしてマスクを作成
ia.SetThreshold(0.7F);
Bitmap img = (Bitmap)Bitmap.FromFile("sample01.jpg");
g1 = Graphics.FromImage(img);
g1.DrawImage(img, new Rectangle(0, 0, 255, 255), 0, 0, 255, 255, GraphicsUnit.Pixel, ia);
g1.Dispose();
pictureBox1.Image = img;
img.Save("Sample02.jpg");
for (int y = 0; y < img.Height; y++)
{
for (int x = 0; x < img.Width; x++)
{
// マスクをチェック
if (img.GetPixel(x, y) == Color.FromArgb(255,0,0,0))
{
bmp.SetPixel(x, y, Color.White);
}
}
}
pictureBox2.Image = bmp;
bmp.Save("sample03.jpg");
}
といった具合です
お礼遅くなって申し訳ございません。
私の場合、Color.FromArgb(255,0,0,0)では正確でないので、これでは出来ませんでした。
int P = bitmap.GetPixel(X, Y).ToArgb();
if(P == 色変更したいところのP)
bitmap2.SetPixel(X, Y, Color.FromArgb(0xffffff));
else
bitmap2.SetPixel(X, Y, Color.FromArgb(P));
というふうにして解決できました。
何度も回答していただき、ありがとうございました。
また、質問がでてきた際はよろしくお願いいたします。
No.3
- 回答日時:
マスク画像を作成してこれを使って BitmapのGetPixel/SetPixelで処理かなぁ
# もっとスマートなやり方があると思いますが …
ImageAttributes Ia = new ImageAttributes();
Ia.SetThreshold(0.7F);
g.DrawImage( img, new Rectatngle( 0, 0, img.Width, img.Height),
0, 0, img.Width, img.Height, GraphicsUnit.Pixel, ia );
g.Dispose();
for( y = 0; y < img.Height; y++ ) {
for ( x = 0; x < img.Width; x++ ) {
if ( img.GetPixel( x, y ) == Color.Black ) {
bmp.SetPixel( x, y, Color.White );
}
}
}
といった具合かなぁ …
この回答への補足
回答ありがとうございます。
記述とおり、プログラムしてみたのですが、
色が薄くなっただけで、黒色が白色には変わりませんでした。
どうしたらよろしいでしょうか?
No.2
- 回答日時:
一部訂正
Bitmap bmp = new Bitmap( img.Width * 2 + 20, img.Height );
でした
この回答への補足
回答ありがとうございます。
web上の画像を保存し、それを読み込んで色変換することは出来ました。
しかし、スキャンした画像を読み込んで、色の変更をしようとすると、
スキャンした画像の色が同じ黒でもRGBが違っていて、
cms[0].OldColor = Color.Black;
では、判断してくれないようです。
RGBがこの範囲からこの範囲までの色を白色にしたいときは、どうすればよろしいでしょうか?
No.1
- 回答日時:
g.DrawImageで描画している位置がおかしいと思います
元もと gを Graphics.FromImageで作成しているので
img.Widthの幅しかありません
img.Width + 10が左端とした場合 クリッピングされて描画自体しないでしょう
2つの描画結果得たいのであれば
Bitmap bmp = new Bitmap( img.Width + 20, img.Height );
Graphics g = Graphics.FromImage( bmp );
といった具合でグラフィックスオブジェクトを作成して
g.DrawImage( img, 0, 0, img.Width, img. Height );
g.DrawImage( New Rectangle( img.Width + 10, 0, img.Width, img.Height), 0, 0, img.Width, img.Height, GraphicsUnit.Pixel, ia );
といった具合で描画しましょう
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- JavaScript 画像の表示位置 3 2022/12/23 08:25
- その他(プログラミング・Web制作) pythonで、tkinterとpillowの組み合わせ 2 2022/08/16 17:42
- HTML・CSS 【HTML】【CSS】【Swiper】 元の画像は横1200×縦600なのですが、実際のサイト上に反 5 2022/07/16 13:57
- HTML・CSS img と p を縦中央に配置したいのですがうまくいきません。 2 2023/01/12 14:38
- JavaScript jQueryでのドラッグアンドドロップについて 1 2022/07/30 09:10
- JavaScript アップロードファイルの種類によって処理を分岐させたいのですが書き方が分からずアドバイスお願いします 4 2023/06/17 19:12
- JavaScript jQueryで同じクラス名のものを別物として扱いたい 1 2022/06/17 14:14
- JavaScript html5に変えるとスライドショーが消えてしまった。 3 2022/03/26 19:53
- HTML・CSS CSSが効かずどのように指定すれば良いか分からないのでアドバイスお願い致します 2 2023/06/07 12:25
- PHP PHP echo バックスラッシュの使い方 img要素 2 2023/01/08 22:46
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
MFCで画像を表示させているので...
-
ダイアログから画像ファイルは...
-
複数画像のランダム複数表示(...
-
JavaScriptで変更した属性の元...
-
指定したフォルダの画像を一括...
-
HTMLからimgのsrcのみを正規表...
-
onclickで画面が固まる・・・ら...
-
色の変更
-
imgボタンにfocusの当て方
-
html内にスライドショーを複数設置
-
error LNK2019 未解決のシンボ...
-
MAX関数を使ってからLEFT JOIN...
-
前回の質問の続き
-
c++std::string型をTCHARに変換...
-
jQueryでのドラッグアンドドロ...
-
createElementで作成した要素を...
-
フッター上部に謎の隙間
-
jspでcssが読み込めない
-
どの<li><a> が押されたか判別...
-
スクロール可能なチェックボックス
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
JavaScriptで変更した属性の元...
-
MFCで画像を表示させているので...
-
【OpenCV】二値画像後、白の部...
-
外部javascriptの重複を防ぐには
-
Vb.net2005での画像の合成方法
-
pythonで、tkinterとpillowの組...
-
html内にスライドショーを複数設置
-
ラズパイでno module named zbar
-
libjpegライブラリの使い方につ...
-
リンク先を動的に変更する
-
外部ファイルにしたら文字化け...
-
プログラムの上手な書き方は?
-
複数画像のランダム複数表示(...
-
error LNK2019 未解決のシンボ...
-
pythonのpygameでキャラクター...
-
imgボタンにfocusの当て方
-
OpenCVで固定枠で画像を操作す...
-
(javascript)HTMLで指定した...
-
<noscript>と</a>の関係
-
nodejsの画像表示は特別なこと...
おすすめ情報