pixel = pixels[i] | pixels[i++];
That doesn't join them to a 64-bit int (and you would've wanted pixels[++i]
anyway). Instead, access the 16-bit numbers separately on the two indices:
while(i < len) {
pixel = pixels[i++];
colorData[n++] = (pixel >>> 0) & 0xffff; // R
colorData[n++] = (pixel >>> 16) & 0xffff; // G
pixel = pixels[i++];
colorData[n++] = (pixel >>> 0) & 0xffff; // B
alphaData[a++] = (pixel >>> 16) & 0xffff; // A
}