2017-11-30 138 views
1

私はUnity3D内のAndroidデバイスでビデオと写真のキャプチャを行うためにウェブカメラストリーミングに取り組んでいます。私がWebカメラのフィードをキャプチャするために見つけた例のほとんどは、デバイスのカメラハードウェアにアクセスするために特定のWebCamTextureオブジェクトを使用しています。私は現在、カメラの入力をキャプチャすることができますが、WebCamTextureはデータをColor32 []として保存します。私はColor32 []をバイト[]に変換するこの解決策を見つけましたが、赤と青のカラーチャンネルを交換しているようです。Color32配列をバイト配列に変換して、ネットワーク経由で送信します。

https://stackoverflow.com/a/21575147/8115962

逆転されることから、赤と青のチャンネルを防止するための方法はありますか?ここで

+0

ネットワークを介してテクスチャを送信することは、実際には重く、帯域幅を無駄にします。それを送信する前にjpgまたはpngに変換してみませんか? [こちら](https://stackoverflow.com/questions/42717713/unity-live-video-streaming/42727918#42727918)の記事をご覧ください。 – Programmer

答えて

1

WebCamTextureからバイト配列へColor32配列を変換する別の方法です:

まず、変換された配列を保持する構造を作成:変換する

[StructLayout(LayoutKind.Explicit)] 
public struct Color32Array 
{ 
    [FieldOffset(0)] 
    public byte[] byteArray; 

    [FieldOffset(0)] 
    public Color32[] colors; 
} 

WebCamTexture

WebCamTexture webcamTex = new WebCamTexture(); 

その構造の新しいインスタンスを作成します。

適切なサイズと
Color32Array colorArray = new Color32Array(); 

初期化Color32:

colorArray.colors = new Color32[webcamTex.width * webcamTex.height]; 

が自動的にバイト配列を埋めるColor32を埋めるには:

webcamTex.GetPixels32(colorArray.colors); 

さて、あなたはバイト配列をあるcolorArray.byteArrayを使用することができます。テクスチャ2Dに

ロード必要な場合:

Texture2D tex = new Texture2D(2, 2); 
tex.LoadRawTextureData(colorArray.byteArray); 
tex.Apply(); 

私はそれは、その後にそれを送るJPEGまたはPNGに、その後Texture2DWebCamTextureを変換する方が良いでしょう、私のcommentに言ったようにネットワーク。これにより、画像のサイズが小さくなります。詳細については、this答えを参照してください。

関連する問題