Преобразование отрицательного целого числа в 8-битный массив byte [] для обновления данных EXIF ​​изображения (широта / долгота GPS); Два дополнения? - PullRequest
0 голосов
/ 02 мая 2020

У меня есть функция, которая преобразует три целых числа в байтовый массив:

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 широта / долгота: Изображение файла

Я вполне уверен, что это можно решить с комплиментом двух, но я сейчас застрял. Кто-нибудь захочет мне помочь?

1 Ответ

0 голосов
/ 02 мая 2020

Неважно, невозможно делать то, что я хочу. Обходным путем является установка тега NESW в данных exif. Значение может быть положительным, но оно будет интерпретировано как отрицательное с тегом S (для юга).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...