我正在尝试获取特定位置的像素颜色(Tap事件)。
我有以下代码:
private void iiiimage_Tap(object sender, System.Windows.Input.GestureEventArgs e)
{
Point point = e.GetPosition(iiiimage);
ApplicationTitle.Text = point.ToString();
var wb = new WriteableBitmap(iiiimage, null);
int arrayPos = (int)point.X * (int)point.Y;
PageTitle.Text = arrayPos.ToString();
int colorAsInt = wb.Pixels[arrayPos];
Color c = Color.FromArgb((byte)((colorAsInt >> 0x18) & 0xff),
(byte)((colorAsInt >> 0x10) & 0xff),
(byte)((colorAsInt >> 8) & 0xff),
(byte)(colorAsInt & 0xff));
r3ct.Fill = new SolidColorBrush(c);
}截图显示出了什么问题。白色错误(提示)的位置是蓝色的,但是代码返回一个像素,该像素位于图像顶部(红色)。

我做错了什么?
你好,尼尔斯
发布于 2013-12-14 20:37:28
尝试执行以下修改。不过,我不知道这在WP7上是否有效。我想应该考虑ActualWidth和ActualHeight,因为您需要将以单位表示的坐标转换为像素。
private void iiiimage_Tap(object sender, System.Windows.Input.GestureEventArgs e)
{
Point point = e.GetPosition(iiiimage);
ApplicationTitle.Text = point.ToString();
var wb = new WriteableBitmap(iiiimage, null);
int x, y;
x = (int)(wb.PixelWidth * point.X / iiiimage.ActualWidth);
y = (int)(wb.PixelHeight * point.Y / iiiimage.ActualHeight);
int arrayPos = y * wb.PixelWidth + x;
PageTitle.Text = String.Format("({0} ; {1}) --> {2}", x, y, arrayPos);
int colorAsInt = wb.Pixels[arrayPos];
Color c = Color.FromArgb((byte)((colorAsInt >> 0x18) & 0xff),
(byte)((colorAsInt >> 0x10) & 0xff),
(byte)((colorAsInt >> 8) & 0xff),
(byte)(colorAsInt & 0xff));
r3ct.Fill = new SolidColorBrush(c);
}https://stackoverflow.com/questions/20586680
复制相似问题