У меня есть функция, которая преобразует три целых числа в байтовый массив:
private static byte[] FloatToExifGps(int degrees, int minutes, int seconds)
{
var secBytes = BitConverter.GetBytes(seconds);
var secDivisor = BitConverter.GetBytes(100);
var bytedegree = BitConverter.GetBytes(degrees);
byte[] rv = { (byte)degrees, 0, 0, 0, 1, 0, 0, 0, (byte)minutes, 0, 0, 0, 1, 0, 0, 0, secBytes[0], secBytes[1], 0, 0, secDivisor[0], 0, 0, 0 };
return rv;
}
Функция SetPropertyItem принимает только байт [], где в нем три рациональных числа.
Если я использую:
FloatToExifGps(51, 47, 1234)
, тогда я получу именно то, что мне нужно, и он преобразует его в настоящий десятичный GPS.
Однако, если я использую отрицательное целое число, тогда значение начинает возвращаться от 0 до 255, 254 и c из-за байта два в диапазоне от 0 до 255.
Так, например, если я попытаюсь использовать функцию для этого числа:
-1.1159028
Должен выйти на
-1; 53; 2.7
Но получится как
255; 53; 3.48
Когда я затем использую этот массив SetPropertyItem, он переводится буквально, и я получаю невозможный GPS широта / долгота: Изображение файла
Я вполне уверен, что это можно решить с комплиментом двух, но я сейчас застрял. Кто-нибудь захочет мне помочь?