pixel(x、y)の場合、ピクセルをWhiteに設定したい画像があります。165..NET ColorMatrixを使用して色を変更する方法は?
その後、White以外のすべてのピクセルを黒に設定します。
ColorMatrixを使用してこれを行うことはできますか?
pixel(x、y)の場合、ピクセルをWhiteに設定したい画像があります。165..NET ColorMatrixを使用して色を変更する方法は?
その後、White以外のすべてのピクセルを黒に設定します。
ColorMatrixを使用してこれを行うことはできますか?
これは、カラーマップでは実行できません。 colormatrixはある色から別の色への線形変換に適しています。あなたが必要とするのは線形ではありません。
これらの比較的単純な画像操作を行う良い方法は、ビットマップデータを自分で直接取得することです。 Bob Powellはこの記事をhttp://www.bobpowell.net/lockingbits.htmに書いています。 Marshalクラスを使用してビットマップをロックし、そのデータにアクセスする方法について説明します。
また、この記事にも少し書いてあります。最大の違いは、画像データをint配列にコピーすることで、これは少し簡単になります。 http://ilab.ahemm.org/tutBitmap.html
これは、これらの線に沿って構造体を持って良いことだ:
[StructLayout(LayoutKind.Explicit)]
public struct Pixel
{
// These fields provide access to the individual
// components (A, R, G, and B), or the data as
// a whole in the form of a 32-bit integer
// (signed or unsigned). Raw fields are used
// instead of properties for performance considerations.
[FieldOffset(0)]
public int Int32;
[FieldOffset(0)]
public uint UInt32;
[FieldOffset(0)]
public byte Blue;
[FieldOffset(1)]
public byte Green;
[FieldOffset(2)]
public byte Red;
[FieldOffset(3)]
public byte Alpha;
// Converts this object to/from a System.Drawing.Color object.
public Color Color {
get {
return Color.FromArgb(Int32);
}
set {
Int32 = Color.ToArgb();
}
}
}
ただ、新しいピクセルオブジェクトを作成し、あなたがたInt32フィールドを経由してそのデータを設定し、各色成分を変更/リードバックすることができます。
Pixel p = new Pixel();
p.Int32 = pixelData[pixelIndex]; // index = x + y * stride
if(p.Red < 165) {
p.Int32 = 0; // Reset pixel
p.Alpha = 255; // Make opaque
pixelData[pixelIndex] = p.Int32;
}
彼は、2つを使用できます。 –
@ハンス:あなたは詳しく教えてもらえますか? – Pedery
これはJanの答えでした。私は彼がボールを拾うことを望んでいた。これがあなたを助けなかったかどうかあなた自身の質問をしてください。 –