将像素数据转换为Bitmap int array-WP8 - C#

时间:2013-04-02 17:18:21

标签: c# bitmap camera windows-phone-8

我想创建一个使用相机的应用程序,从中获取帧,转换它并将其放在屏幕上。我从微软发现了一个教程,通过转换为灰度来实现这一目标,但我并不需要这样做。相反,我需要int数组我必须像8b位图,所以我的转换功能可以正常工作。所以主要的问题是我如何将像素数据数组转换为位图数组,然后将其转回,以便我可以显示它屏幕?另一个解决方案是直接从相机获取位图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位图的源。 我从microsoft获得的教程是here。 感谢。

2 个答案:

答案 0 :(得分: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 */
}

答案 1 :(得分:0)

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

感谢。