Textureからピクセルデータを取得したく、 Texture2D#GetPixels を使って以下のように読み出そうと試みた。
void GetSpritePixels(Sprite sprite) { Texture2D srcTexture = sprite.texture; Color[] colors = srcTexture.GetPixels( (int)Mathf.Floor(sprite.rect.x), (int)Mathf.Floor(sprite.rect.y), (int)Mathf.Floor(sprite.rect.width), (int)Mathf.Floor(sprite.rect.height) ); }
が、エディタ拡張スクリプトから実行したところ、下のようなログを吐いてエクセプションが発生してしまった。
Cannot access pixel data of compressed texture formats which cannot be partially decompressed (such as Crunch). UnityEngine.Texture2D:GetPixels(Int32, Int32, Int32, Int32)
どうも PVRTC_〜という形式の画像からは、GetPixelsで色を取得できないらしい。
たぶん下の表で compressed とついているフォーマットは全部そう。
Unity - Scripting API: TextureFormat
GetPixelsしたいときはUncompressedなフォーマットに変更すればよい。
テクスチャのフォーマットを非圧縮形式にする
プロジェクト内でテクスチャを選択し、インスペクタを見る。
まず圧縮形式はプラットフォームごとに選択する必要があるようなので、タブから対象のプラットフォームの設定を表示。
つぎに Format 欄で非圧縮形式のフォーマットを選択する。
これでGetPixelできる。
テクスチャのインポート設定で Crunch を設定している場合
これでもできない場合、Crunchを有効にしているのかもしれない。
https://docs.unity3d.com/ScriptReference/Texture2D.GetPixels.html
GetPixels is not available on Textures using Crunch texture compression.
とあるので。
でも自分ではGetPixelできたので関係ないのかもしれない。
なぜだろう。
・参考
https://forum.unity3d.com/threads/getpixels-errors-with-pvrtc-compression-enabled.440132/