2013-08-21 3 views
-1

Я хочу отображать 3D-точки с ЖЕЛТОМ цветом в формате .pcd (Documentation of .pcd). Используйте ниже код C# для получения цветового формата PCD от ЖЕЛТЫХ цветов (R: 255, G: 255, B: 0).PCD viewer с цветом

byte red = 255; 
byte green = 255; 
byte blue = 0; 
int rgb = ((int)red) << 16 | ((int)green) << 8 | ((int)blue); 
float rgb2 = (float)rgb; 

Затем возвращается значение rgb2 = 1.677696E+7

И сохранить точки в PCD файл как (x, y, z, 1.677696E+7).

Я использую просмотрщик PCD для отображения точек, но цвет не ЖЕЛТЫЙ, как я ожидаю?

Не так, как смотритель?

+0

Я также обнаружил, что фактический результат цвета - это то же зеленое и синее значение, но красное значение меньше 128. –

+0

Как вы устанавливаете цвет точек? то есть выше вы вычисляете цвет, но не устанавливаете цвет точек. Затем вы снова сохраняете PCD? –

+0

Да. Я сохранил точки в файле PCD, например (x, y, z, color). Например: 100, 100, 100, 1,677696E + 7. –

ответ

1

Я не использую C#, но считаю, что приведение из int в float сохраняет значение, а не битовую структуру. т. е. вы не выполняете реинтерпрет, но фактически конвертируете число.

Поиск этот сайт, я считаю, что то, что вам нужно это BitConverter:

Two C# questions; how can I reinterpret cast a float to an int? Does C# have a non-static conversion operator or user-defined assignment operator so that the conversion takes place on 'this'?

+0

i.e очевидно, что значение поплавка, которое вы печатаете, совпадает с значением int, но этого не должно быть. Если бы битовая структура была одинаковой, вы получали бы совсем другое значение, потому что битовая строка, интерпретируемая как float, сильно отличается от той же битовой строки, что и int. –

0

Проблема решена. Просто используйте цветную структуру PCD с Integer вместо Float (необходимо изменить структуру файлов PCD, чтобы использовать цвет с помощью Integer). Таким образом, мне не нужно делать реинтерпрет с int до float.