如何在窗口的特定位置绘制像素?

时间:2014-11-13 17:44:32

标签: c#

我需要创建一个程序来显示从txt文件中读取的坐标线或点。该应用程序将附加到眼动追踪程序的输出,并将显示数据。

如何在屏幕上的特定坐标处显示某种图形?

注意:窗口是全屏的,我可以使用WPF或WinForms。

2 个答案:

答案 0 :(得分:2)

我会使用Image元素叠加您的视频;类似的东西:

<Grid>
   <Image x:Name=TrackingImage />
   <MediaElement/>
</Grid>

然后在你的代码背后;将源设置为WriteableBitmap。该文档有一个很好的样本,但总结一下:

WriteableBitmap writeableSource = new WriteableBitmap(100, 100, 96, 96, PixelFormats.Bgra32, null);

// Calculate the number of bytes per pixel. 
int _bytesPerPixel = (writeableSource .Format.BitsPerPixel + 7) / 8;
// Stride is bytes per pixel times the number of pixels.
// Stride is the byte width of a single rectangle row.
int _stride = writeableSource .PixelWidth * _bytesPerPixel;

private void SomeUpdateFunction()
{
     // Define the rectangle of the writeable image we will modify. 
     // The size is that of the writeable bitmap.
     Int32Rect _rect = new Int32Rect(0, 0, _wb.PixelWidth, _wb.PixelHeight);

    //Update writeable bitmap with the colorArray to the image.
    _wb.WritePixels(_rect, pixelBuffer, _stride, 0);
    TrackingImage.Source = writeableSource;
}

请注意,它使用WritePixels(特别是;此重载:MSDN

显然,您需要修改参数以在正确的位置获取正确的像素。这是正确的技术。

这个答案的灵感来自:Drawing Pixels in WPF如果您需要更多信息,可能值得一看。

答案 1 :(得分:1)

各种位图格式是将彩色点放在特定位置的指令。为什么不使用这样的东西?你需要做什么?

关于您的眼动追踪和点数据评论,如果您想将其与捕获的视频合成,那么您不必担心如何显示图像,因为您需要考虑如何为视频本身添加点。视频播放器将进行显示。

根据我对屏幕捕获和视频编解码器的了解(不是很多),最好在编译之前使用未压缩的视频。否则,您必须进行解码,添加和重新编码。我正在寻找一种方法来挂钩捕捉程序并将实时眼动追踪器数据添加到捕获的帧中。