2

我想制作一个使用相机的应用程序,从中获取框架,将其转换并放在屏幕上。我从微软找到了一个教程,它通过转换为灰度来做到这一点,但我真的不需要那个。相反,我需要从 8b 位图中得到的 int 数组,这样我的转换函数才能正常工作。所以主要问题是如何将该像素数据数组转换为位图数组,然后将其转回以便我可以显示它屏幕?另一种解决方案是直接从相机获取位图 int 数组,但我该怎么做呢?

我需要处理以下代码:

    void PumpARGBFrames()
    {
        // Create capture buffer.
        Width = (int)cam.PreviewResolution.Width;
        Height = (int)cam.PreviewResolution.Height;
        int[] ARGBPx = new int[Width * Height];

        try
        {
            PhotoCamera phCam = (PhotoCamera)cam;

            while (pumpARGBFrames)
            {
                pauseFramesEvent.WaitOne();

                phCam.GetPreviewBufferArgb32(ARGBPx);

                //here i need to do the conversion back and forward

                pauseFramesEvent.Reset();
                Deployment.Current.Dispatcher.BeginInvoke(delegate()
                {
                    ARGBPx.CopyTo(wb.Pixels, 0);
                    wb.Invalidate();

                    pauseFramesEvent.Set();
                });
            }

        }
        catch (Exception e)
        {
            this.Dispatcher.BeginInvoke(delegate()
            {
                // Display error message.
                txtDebug.Text = e.Message;
            });
        }
    }

所以,事实是我不需要位图,而是需要一个 int 数组作为 8b 位图的来源。我从微软那里得到的教程在这里。谢谢。

4

2 回答 2

0

尝试类似:

Bitmap bmp = new Bitmap(Width, Height);

for (int i = 0; i < ARGBPx.Length; ++i)
{
    bmp.SetPixel(
        i % Width,
        i / Width,
        /* something to create a Color object from the pixel int value */
}
于 2013-04-02T17:31:37.127 回答
0

好的,我意识到像素数据数组实际上是一个颜色数组,在 32b 中。所以我必须将 32b 颜色转换为 8b 颜色,并不像我想象的那么难。

谢谢。

于 2013-04-03T00:33:17.950 回答