Help us understand the problem. What is going on with this article?

Ricoh thetaのJPGから角度を取り出すコード

More than 5 years have passed since last update.

RICOH SHETAから角度を取り出すコード@C#版
MIROさんから頂いたコードを元に改造しました。
UNITYで使用することを前提にしています。

ViewPict.cs
using UnityEngine;
using System.Collections;
using System.IO;

public class ViewPict : MonoBehaviour 
{
    static int SerchAngle(string fileName)
    {
        BinaryReader br = new BinaryReader(new FileStream("Assets/Resources/" + fileName+".jpg", FileMode.Open));
        byte [] buf = br.ReadBytes((int)br.BaseStream.Length );
        br.Close();
        br = null;

        int ix;
        int offset;
        float compass;
        float zenith_x;
        float zenith_y;



        // check EXIF
        // find CompassEs
        ix = find_data(buf,new byte[] {0x00,0x04,0x00,0x05,0x00,0x00,0x00,0x01});
        if (ix<0) 
        {
            return -1; 
        }
        offset = get_dword(buf,ix)+12;
        compass = parse_u_rational(buf,offset);

        // find ZenithEs
        ix = find_data(buf,new byte[] {0x00,0x03,0x00,0x0A,0x00,0x00,0x00,0x02});
        if (ix<0) 
        {
            return -1;
        }
        offset = get_dword(buf,ix)+12;
        zenith_x = parse_u_rational(buf,offset  );
        zenith_y = parse_u_rational(buf,offset+8);

        Debug.Log( "1:" + zenith_y.ToString() + ",2:" + zenith_x.ToString());
        return 0; 
        //sphere.transform.Rotate(0,0,-zenith_y);
        //sphere.transform.Rotate(zenith_x,0,0);
    }

    static int find_data(byte[] buf, byte[] pattern)
    {
        int max;

        max = buf.Length;

        if (max>64*1000) 
        { 
            max = 64*1000; 
        }


        for (int i = 0; i < max; i++)
        {
            int iTemp = i;
            for (int p = 0; p < pattern.Length ; p++, iTemp++)
            {
                if (pattern[p] != buf[iTemp] || iTemp >= max)
                {
                    break;
                }

                if (p == pattern.Length - 1)
                {
                    return iTemp + 1;
                }
            }
        }

        return -1;
    }

    static int get_dword(byte[] buf, int offset)
    {

        return (buf[offset]<<24) | (buf[offset+1]<<16) | (buf[offset+2]<<8) | buf[offset+3];
    }

    static float parse_u_rational(byte[] buf, int offset) 
    {
        float a;
        float b;
        a = get_dword(buf,offset  );
        b = get_dword(buf,offset+4);
        return a/b;
    }
}
nano06126728
UE4いじってます。 時々Unityもやります。
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away