我想创建一个使用相机的应用程序,从中获取帧,转换它并将其放在屏幕上。我从微软发现了一个教程,通过转换为灰度来实现这一目标,但我并不需要这样做。相反,我需要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。 感谢。
答案 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颜色,不像我想的那么难。
感谢。