Ok I see. What result did you get when you pass your byte array to your Camera1_Preview sub (and pass it directly to InitializeFromBytesArray since the data are already in JPG format)?
Note that GetPixel and GetPixels are two different functions and I wouldn't use GetPixel to get all the pixels of an image because it's horribly slow.
The _Preview event is generated by the Camera, and what I have done in preview is to use the .PreviewImageToJpeg function to convert the Data() byte array from YUV format to JPG stream. Then I have initilized an InputStream with the .InitializeFromBytesArray function. Then I have initialized a normal bitmap with the .Initialize2 function. In my opinion too passages to access memory, but it works fine and make it possible to do some simple analisys on preview frames.
Sub Camera1_Preview (data() As Byte)
Dim dataJpg() As Byte, iSt As InputStream, img As Bitmap
dataJpg = camEx.PreviewImageToJpeg(data, 80)
iSt.InitializeFromBytesArray(dataJpg, 0, dataJpg.Length)
img.Initialize2(iSt)
img.GetPixel(img.Width/2, img.Height/2) ...
...
But as you know the preview frame is not high resolution. On an S4 is 1440x1080, that is not bad but very different from the 12Mpixel of the full frame picture. To do deeper analisys on the image I need the full frame picture, and to do that now I need to save and open it again (TOO SLOW).