writeablebitmapがひどく失敗し、ピクセル配列は非常に不正確です
-
11-10-2019 - |
質問
文字通り何時間も試してみましたが、この問題を動かすことができませんでした。
私は800x369であるusercontrolを持っています、そして、それには単純に、ワールドマップを形成するパスが含まれています。これをランドスケープページに置いてから、WriteableBitMapにレンダリングします。次に、変換を実行して、1Dピクセルアレイを2Dアレイの整数に変換します。次に、変換を確認するために、カスタムコントロールのクリックコマンドを配線して、新しく作成した配列のカスタムコントロールに対してPoint.xおよびpoint.yを使用します。したがって、私の論理は次のとおりです。
wb = new WriteableBitmap(worldMap, new TranslateTransform());
wb.Invalidate();
intTest = wb.Pixels.To2DArray(wb.PixelWidth);
私の変換ロジックは次のとおりです。
public static int[,] To2DArray(this int[] arr,int rowLength)
{
int[,] output = new int[rowLength, arr.Length / rowLength];
if (arr.Length % rowLength != 0) throw new IndexOutOfRangeException();
for (int i = 0; i < arr.Length; i++)
{
output[i % rowLength, i / rowLength] = arr[i];
}
return output;
}
さて、私がチェックをするとき、私は完全に奇妙な結果を得る:どうやらすべてのピクセルは-1または0の値であり、これらの値は 完全に独立しています 元の色の。
後世のために:これが私のチェックコードです:
private void Check(object sender, MouseButtonEventArgs e)
{
Point click = e.GetPosition(worldMap);
ChangeNotification(intTest[(int)click.X,(int)click.Y].ToString());
}
結果は、WriteableBitMapがそれにレンダリングしたパスとの相関関係をまったく示していません。パスには固体白がいっぱいです。
一体何が起こっているのですか?運がなくて何時間も試してみました。これは、最初のWP7アプリを提出するのを妨げる大きな問題です。ガイダンスはありますか?
解決
コードは正しく動作し、Silverlightは事前に総編成されたArgbを使用しているため、透過性の場合、RGB値のそれぞれに0が掛けられ、最終結果は0になります。 。 BitConverterクラスを使用してINTからバイトを取得できますが、お勧めします writeablebitmapex メソッドを取得している/setpixelのメソッドと処理します。
16進数を探しているだけなら:
ChangeNotification(intTest[(int)click.X,(int)click.Y].ToString("X8"));