任何人都可以請幫助我在沒有點擊camara點擊的情況下獲取camerapreview框架數據。我想出去一下相機按鈕如何獲得monodroid中的Camerapreview數據
1
A
回答
2
我猜你正在尋找Camera類這個函數來獲取當期的相機數據,
public final void setPreviewCallback (Camera.PreviewCallback cb)
定義回調
private PreviewCallback mPreviewCallback = new PreviewCallback() { public void onPreviewFrame(byte[] data, Camera camera) { } }
預覽開始後,此回調將在每幀上觸發,數據(字節[])爲預覽格式,您可以在設置Camera Paramet ERS
首先得到的支持預覽格式
List<Integer> Camera.Parameters.getSupportedPreviewFormats()
默認格式爲ImageFormat.NV21
如果你想改變預覽格式使用此功能,從可用格式中選擇一種格式列表
Camera.Parameters.setPreviewFormat(int pixel_format)
1
This recipe來自Xamarin解釋瞭如何使用Camera類獲取預覽並將其顯示給用戶。
3
鑑於您使用的是MonoDevelop而不是使用Java編寫,因此該過程會有所不同。
您可以創建一個攝像頭預覽處理程序類,像這樣:
public class CameraListener : Java.Lang.Object, Camera.IPreviewCallback
{
public event PreviewFrameHandler PreviewFrame;
public void OnPreviewFrame(byte[] data, Camera camera)
{
if (PreviewFrame != null)
{
PreviewFrame(this, new PreviewFrameEventArgs(data, camera));
}
}
}
public delegate void PreviewFrameHandler(object sender, PreviewFrameEventArgs e);
public class PreviewFrameEventArgs : EventArgs
{
readonly byte[] _data;
readonly Camera _camera;
public byte[] Data { get { return _data; } }
public Camera Camera { get { return _camera; } }
public PreviewFrameEventArgs(byte[] data, Camera camera)
{
_data = data;
_camera = camera;
}
}
的類提供解僱每一幀接收事件。
在我自己的代碼,我用的是YUV420_NV21格式
我解碼使用下面的方法中的數據:
unsafe public static void convertYUV420_NV21toRGB565(byte* yuvIn, Int16* rgbOut, int width, int height, bool monochrome)
{
int size = width * height;
int offset = size;
int u, v, y1, y2, y3, y4;
for (int i = 0, k = 0; i < size; i += 2, k += 2)
{
y1 = yuvIn[i];
y2 = yuvIn[i + 1];
y3 = yuvIn[width + i];
y4 = yuvIn[width + i + 1];
u = yuvIn[offset + k];
v = yuvIn[offset + k + 1];
u = u - 128;
v = v - 128;
if (monochrome)
{
convertYUVtoRGB565Monochrome(y1, u, v, rgbOut, i);
convertYUVtoRGB565Monochrome(y2, u, v, rgbOut, (i + 1));
convertYUVtoRGB565Monochrome(y3, u, v, rgbOut, (width + i));
convertYUVtoRGB565Monochrome(y4, u, v, rgbOut, (width + i + 1));
}
else
{
convertYUVtoRGB565(y1, u, v, rgbOut, i);
convertYUVtoRGB565(y2, u, v, rgbOut, (i + 1));
convertYUVtoRGB565(y3, u, v, rgbOut, (width + i));
convertYUVtoRGB565(y4, u, v, rgbOut, (width + i + 1));
}
if (i != 0 && (i + 2) % width == 0)
i += width;
}
}
unsafe private static void convertYUVtoRGB565Monochrome(int y, int u, int v, Int16* rgbOut, int index)
{
rgbOut[index] = (short)(((y & 0xf8) << 8) |
((y & 0xfc) << 3) |
((y >> 3) & 0x1f));
}
unsafe private static void convertYUVtoRGB565(int y, int u, int v, Int16* rgbOut, int index)
{
int r = y + (int)1.402f * v;
int g = y - (int)(0.344f * u + 0.714f * v);
int b = y + (int)1.772f * u;
r = r > 255 ? 255 : r < 0 ? 0 : r;
g = g > 255 ? 255 : g < 0 ? 0 : g;
b = b > 255 ? 255 : b < 0 ? 0 : b;
rgbOut[index] = (short)(((b & 0xf8) << 8) |
((g & 0xfc) << 3) |
((r >> 3) & 0x1f));
}
我已經包括單色和彩色解碼器。
從該代碼所產生的數據是在565的OpenGL RGB格式,並且可以用於初始化OpenGL紋理或可以只是用於圖像分析等
鮑勃鮑威爾像素混亂。
相關問題
- 1. Monodroid如何獲得顯示器的PPI
- 2. 如何從monodroid中獲取XML中按鈕標題的數據?
- 3. 如何獲得monodroid中的選定項目標題和說明?
- 4. 如何在Monodroid中獲得一次性GPS位置
- 5. 使用CameraPreview時獲取GPS數據的問題
- 6. 無法獲得listView.ItemClick在MonoDroid的
- 7. 如何獲得數據數據庫中的數據
- 8. 如何獲得數據()
- 9. 如何獲得數據IWbemClassObject **
- 10. 如何獲得數據庫
- 11. 如何獲得數據
- 12. 如何獲得數據庫
- 13. 如何獲得數據
- 14. Monodroid如何複製數據庫
- 15. 從JSON數據如何獲得數據
- 16. MonoDroid:像部署一樣獲得「TestFlightApp」
- 17. 如何獲得Gerrit的數據
- 18. 如何獲得的數據表
- 19. 如何獲得的2個數據
- 20. Tasktracker如何獲得必要的數據
- 21. 如何獲得「最上面的」數據
- 22. 如何獲得android的pcm數據?
- 23. curl在php中 - 如何獲得數組或其他資源獲得的數據
- 24. 如何從android中的數據庫中獲得浮點數
- 25. 無法得到MonoDroid的
- 26. Overlaying animation camerapreview
- 27. 如何獲得從我的數據庫中下的訂單數?
- 28. monodroid:如何在manisfest.xml中創建接收器/元數據子句
- 29. 在monodroid中獲取drawable?
- 30. 獲得數據
我忘了提及你必須啓用UNSAFE代碼。 –