3

2つのWriteableBitmapオブジェクトからの2つの色の値を組み合わせて、それらを使用して何かを計算する必要があります。したがって、最初のオブジェクトでForEachループを実行し、その色の値と2番目のオブジェクトの色の値をメソッドに解析します。

writeableBitmap.ForEach((x, y, color) => 
    MergePixelColor(color, mergedWriteableBitmap.GetPixel(x, y)));

デリゲートから直接取得する最初の値ですが、2番目の色の値にアクセスするには、WriteableBitmap拡張機能のGetPixelメソッドを使用します。

これは実際にはそのように機能するはずですが、GetPixelメソッドが間違ったデータを返すようです(色がどういうわけか誤って「黄色がかった」または「赤みがかった」)。

調べて、次の記事を見つけました。

http://forums.silverlight.net/t/250392.aspx/1?WriteableBitmap+GetPixel+

そこには、画像フォーマットに問題があるかもしれないと書かれています。私の問題は、画像が生成されるポイントに直接アクセスできないことです。私はそれらをWebサービスから抽出しましたが、その部分を適応させることができるかどうかはわかりません(少なくとも私からは)。

私の質問は、この問題を修正する他の方法または回避策があるかどうかです。あなたはなにか考えはありますか?

4

1 に答える 1

0

この解決策は単なる回避策かもしれませんが、与えられた時間でより良いものを思いつくことができませんでした. 事前に mergedWriteableBitmap をループして、その色の値を辞書に保存するだけです。

IDictionary<int, Color> mergedWriteableBitmapMapping = new Dictionary<int, Color>();
mergedWriteableBitmap.ForEach((x, y, color) =>
{
    int index = GetIndex(x, y, mergedWriteableBitmap.PixelWidth);
    mergedWriteableBitmapMapping.Add(index, color);
    return color;
});

その後、この辞書の値を使用して、正しい色の値をメソッドに解析します。

writeableBitmap.ForEach((x, y, color) => 
    MergePixelColor(color, mergedWriteableBitmapMapping[GetIndex(x, y, mergedWriteableBitmap.PixelWidth)]));
于 2012-08-16T06:11:02.257 に答える