2013-09-27 5 views
1

Я ищу передачу данных пикселей с сервера на программу Android. На сервере данные пикселя имеют форму RGBA с одним байтом на цвет/прозрачность. К сожалению, на android соответствующий формат пикселей ARGB, то есть альфа-канал поступает перед данными цвета, а не после, как на сервере. Я волнуюсь, что перетасовка данных RGBA в формат ARGB на сервере будет слишком медленной, и поэтому я надеялся найти другой путь. Кстати, сервер написан на python. Я беру данные экрана, используя функцию, представленную здесь: Image.frombuffer with 16-bit image data. Если есть способ захватить захват экрана, используя этот метод (или какой-либо другой) в формате ARGB или даже RGB_565, я хотел бы услышать об этом.Android turn 3 sequence byte [] to int []

Один трюк, который я решил решить, состоял в том, чтобы использовать флаг isPreMultiplied на canvas.drawbitmap (int [], ...), а затем отправлять только байты RGB с сервера. Затем я мог бы перекомпоновковать RGB-биты в ints на устройстве Android и отправить это на drawbitmap, полностью игнорируя альфа-канал.

Однако это оставляет мне еще одну проблему. Инты состоят из 4 байтов, и у меня есть последовательность из 3 байтов в массиве byte [] (значения RGB). Я использовал некоторые предлагаемые здесь решения: byte array to Int Array для преобразования моего байта [] в int [] при передаче данных RGBA. Но теперь, когда это всего лишь 3 байтовых последовательности, я не уверен, как быстро преобразовать их в ints. Я надеюсь, что для близкого к реальному времени обновления изображения, поэтому мне нужен способ сделать это быстро. Есть идеи?

ответ

1
int rgbInt = byteArray[0] << 16 + byteArray[1] << 8 + byteArray[2];  
// not sure these are in the correct order, you may have to swap the indexes around. 

Вам также может потребоваться включить

+ 0xFF << 24 

установить альфа-значение непрозрачности.