2016-07-20 1 views
1

Texture2Dの品質を低下させる良い方法があるのだろうかと思います。ここでの状況は、キャプチャした写真をiOS上のサーバーに送信したいのですが、キャプチャされた写真のサイズが大きすぎるため、サーバーからの応答に時間がかかります。何らかの理由で、カメラから取得したtexture2Dは、ミップマップ(getPixels(2)でサイズを直接小さくすることができます)をサポートしていません。それでも、mipmapを使用するには、Texture2D(tmp)を作成してキャプチャした写真からコピーし、別のtexture2Dを作成してtmpのハイミップマップレベルを取得する必要があります。しかし、それはiOS上で多くのメモリを消費するため、クラッシュを引き起こす可能性があります。私の問題を解決できるどんな考えですか?Unity3DのiOS上でTexture2Dのサイズを小さくする(ミップマップは使用できません)

ありがとうございます。

更新

pixels = new Color[(int)(photo.width * photo.height/16)]; 
pixels2 = photo.GetPixels(); 
for(int i = 0; i < pixels.Length; ++i){ 
    pixels[i] = pixels2[16*i]; 
} 
tempPhoto = new Texture2D((int)photo.width/4, (int)photo.height/4); 
tempPhoto.SetPixels(pixels); 
tempPhoto.Apply(); 

これは大丈夫でしょうか?

答えて

0

pixels = new Color[(int)(photo.width * photo.height/16)]; 
pixels2 = photo.GetPixels(); 
for(int i = 0; i < (int)photo.height/4; ++i){ 
    for(int j = 0; j < (int)photo.width/4; ++j){ 
     pixels[i*(int)(photo.width/4) + j] = pixels2[i*4*(int)(photo.width) + j*4]; 
    } 
} 

tempPhoto = new Texture2D((int)photo.width/4, (int)photo.height/4); 
tempPhoto.SetPixels(pixels); 
tempPhoto.Apply(); 

「ハードコーディング設定するピクセル」で、この問題を修正しました。しかし、私は、私はまだ慎重に色[]配列の使用を気にする必要があると思う、私はそれ以来、[]色の「使用」は使用できません"IDisposable"をサポートしていません。しかし、hereによると、「pixels」と「pixels2」の両方を使用した後にnullに設定すると、Unityが自動的に処理するようです。

+0

送信用に新しいテクスチャを作成している場合は、代わりにbyteまたはcolor32配列を送信することができます。そのスクリプトの最後の3行は必要ありません。 – mgear

+0

@mgearはいu r右、感謝します。 – milanow

関連する問題