いんでぃーづ

ゲームいろいろ、いろいろ自由

Unity : テクスチャからGetPixelしたときにエラー

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なフォーマットに変更すればよい。

テクスチャのフォーマットを非圧縮形式にする

プロジェクト内でテクスチャを選択し、インスペクタを見る。

f:id:sugar_affordance:20170616193800p:plain

まず圧縮形式はプラットフォームごとに選択する必要があるようなので、タブから対象のプラットフォームの設定を表示。
つぎに 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/


“Unity” and Unity logos are trademarks or registered trademarks of Unity Technologies or its affiliates in the U.S. and elsewhere, and are used under license.


免責事項

当サイトの広告バナー、リンクによって提供される情報、サービス内容について、当サイトは一切の責任を負いません。

また、当サイトの情報を元にユーザ様が不利益を被った場合にも、当サイトは一切の責任を負いません。

すべて自己責任でお願いします。