Как правильно прочитать данные из 16 битного raw файла

Программирование на Юнити.

Как правильно прочитать данные из 16 битного raw файла

Сообщение hjk777 15 апр 2011, 12:14

Здравствуйте, подскажите пожалуйста как правильно прочитать из 16 битного raw файла высот. Я делаю так
Синтаксис:
Используется csharp

BinaryReader b = new BinaryReader(File.Open(heighmap, FileMode.Open));
            int length = (int)b.BaseStream.Length;
            float[,] data1 = new float[resolution, resolution];
int pos = 0;
                int index = 0;
                ushort[] bytes = new ushort[length];
                //float[] bytes = new float[length];
                while (pos < length)
                {
                    pos += sizeof(ushort);
                    //bytes[index++] = b.ReadUInt16();
                    bytes[index++] = b.ReadByte();
                }                
                int i = 0, j = 0;
               
                for (i = 0; i < resolution; i++)
                    for (j = 0; j < resolution; j++)
                    {                      
                        data1[i, j] = bytes[i * resolution + j] / divide;
                    }
            }
            newTerrainData1.SetHeights(0, 0, data1);
            Terrain.CreateTerrainGameObject(newTerrainData1);
            Terrain.activeTerrain.name = name;


Но он читает данные как из 8 битного файла , как сделать правильно? подскажите пожалуйста :(
Последний раз редактировалось hjk777 15 апр 2011, 12:25, всего редактировалось 1 раз.
hjk777
UNец
 
Сообщения: 23
Зарегистрирован: 11 мар 2011, 10:18

Re: Как правильно прочитать данные из 16 битного raw файла

Сообщение mentors 15 апр 2011, 12:20

ReadBytes (16) As Byte()
Так подойдет? Просто raw файлы читать не приходилось, но 16х бинарники именно так считываю..
Последний раз редактировалось mentors 15 апр 2011, 12:26, всего редактировалось 1 раз.
Аватара пользователя
mentors
UNITрон
 
Сообщения: 309
Зарегистрирован: 20 мар 2011, 19:32
Откуда: Россия

Re: Как правильно прочитать данные из 16 битного raw файла

Сообщение hjk777 15 апр 2011, 12:26

Спасибо щас попробую :)
hjk777
UNец
 
Сообщения: 23
Зарегистрирован: 11 мар 2011, 10:18

Re: Как правильно прочитать данные из 16 битного raw файла

Сообщение hjk777 15 апр 2011, 12:35

Блин пишет что оператор as должен использоваться с ссылочным типом допускающим значение null :(
hjk777
UNец
 
Сообщения: 23
Зарегистрирован: 11 мар 2011, 10:18

Re: Как правильно прочитать данные из 16 битного raw файла

Сообщение mentors 15 апр 2011, 12:42

hjk777 писал(а):Блин пишет что оператор as должен использоваться с ссылочным типом допускающим значение null :(

As я написал как возвращаемое значение...

Вот так должно быть:
Синтаксис:
Используется csharp
byte[] byteArray = binReader.ReadBytes(16);
Аватара пользователя
mentors
UNITрон
 
Сообщения: 309
Зарегистрирован: 20 мар 2011, 19:32
Откуда: Россия

Re: Как правильно прочитать данные из 16 битного raw файла

Сообщение hjk777 15 апр 2011, 13:01

эмм... а можешь написать как это в моем коде будет выглядит. Я переделал но результата никакого
пишу так :
Синтаксис:
Используется csharp
//BinaryReader b = new BinaryReader(File.Open(heighmap, FileMode.Open));
                byte[] b = new BinaryReader(File.Open(heighmap, FileMode.Open)).ReadBytes(16);
                //int length = (int)b.BaseStream.Length;
                int length = (int)b.Length;
                int pos = 0;
                int index = 0;
                byte[] bytes = new byte[length];
                //float[] bytes = new float[length];
                while (pos < length)
                {

                    pos += sizeof(ushort);
                    //bytes[index++] = b.ReadUInt16();
                    //bytes[index++] = b.ReadByte();
                    //bytes[index++] = b.ReadBytes(16)yte()
                }

               
                int i = 0, j = 0;
                //for (i = 0; (i < resolution) && (x * resolution + i < srcRes); i++)
                //    for (j = 0; (j < resolution) && (y * resolution + j < srcRes); j++)


                for (i = 0; i < resolution; i++)
                    for (j = 0; j < resolution; j++)
                    {
                       
                        //data1[i, j] = bytes[i * resolution + j] / divide;
                        data1[i, j] = b[i * resolution + j] / divide;



                    }
            }
            newTerrainData1.SetHeights(0, 0, data1);
            Terrain.CreateTerrainGameObject(newTerrainData1);
            Terrain.activeTerrain.name = name;
Последний раз редактировалось hjk777 15 апр 2011, 13:09, всего редактировалось 1 раз.
hjk777
UNец
 
Сообщения: 23
Зарегистрирован: 11 мар 2011, 10:18

Re: Как правильно прочитать данные из 16 битного raw файла

Сообщение mentors 15 апр 2011, 13:08

hjk777 писал(а):эмм... а можешь написать как это в моем коде будет выглядит но результата никакого
Сори, сейчас нет возможности ковырять код...
Совет, создай консольное приложение в котором прочитай бинарник в массив, в режиме отладки просмотри данные которые в массиве, обычно практически сразу всё стает ясно... Потом уже будет проще преобразовать и организовать данные из бинарника...
Аватара пользователя
mentors
UNITрон
 
Сообщения: 309
Зарегистрирован: 20 мар 2011, 19:32
Откуда: Россия

Re: Как правильно прочитать данные из 16 битного raw файла

Сообщение hjk777 15 апр 2011, 13:12

Ладно всеравно спасибо за подсказку , буду ковырять код в этом направлении :)
hjk777
UNец
 
Сообщения: 23
Зарегистрирован: 11 мар 2011, 10:18

Re: Как правильно прочитать данные из 16 битного raw файла

Сообщение mentors 15 апр 2011, 13:15

hjk777 писал(а):Ладно всеравно спасибо за подсказку , буду ковырять код в этом направлении :)

У меня просто урок сейчас, на долго не могу отвлекаться ;)
Вот еще помощь: http://msdn.microsoft.com/ru-ru/library/system.io.binaryreader.readbytes.aspx
Аватара пользователя
mentors
UNITрон
 
Сообщения: 309
Зарегистрирован: 20 мар 2011, 19:32
Откуда: Россия


Вернуться в Скрипты

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 5