private void fillBytesWithCoordinate(final byte[] bytes, final List<CoordinateHeader> coordinateHeaders) {
        int index = 0;
        for(CoordinateHeader coordinateHeader : coordinateHeaders) {
            // Ilda protocol
            bytes[index++] = (byte) coordinateHeader.getProtocol().charAt(0);
            bytes[index++] = (byte) coordinateHeader.getProtocol().charAt(1);
            bytes[index++] = (byte) coordinateHeader.getProtocol().charAt(2);
            bytes[index++] = (byte) coordinateHeader.getProtocol().charAt(3);
            // three unused 0 bytes
            bytes[index++] = 0;
            bytes[index++] = 0;
            bytes[index++] = 0;
            // Format code. 3D = 0, 2D = 1
            bytes[index++] = (byte) (coordinateHeader.isThreeD() ? 0 : 1);
            // Frame name 8 characters
            bytes[index++] = (byte) coordinateHeader.getFrameName().charAt(0);
            bytes[index++] = (byte) coordinateHeader.getFrameName().charAt(1);
            bytes[index++] = (byte) coordinateHeader.getFrameName().charAt(2);
            bytes[index++] = (byte) coordinateHeader.getFrameName().charAt(3);
            bytes[index++] = (byte) coordinateHeader.getFrameName().charAt(4);
            bytes[index++] = (byte) coordinateHeader.getFrameName().charAt(5);
            bytes[index++] = (byte) coordinateHeader.getFrameName().charAt(6);
            bytes[index++] = (byte) coordinateHeader.getFrameName().charAt(7);
            // Company name 8 characters
            bytes[index++] = (byte) coordinateHeader.getCompanyName().charAt(0);
            bytes[index++] = (byte) coordinateHeader.getCompanyName().charAt(1);
            bytes[index++] = (byte) coordinateHeader.getCompanyName().charAt(2);
            bytes[index++] = (byte) coordinateHeader.getCompanyName().charAt(3);
            bytes[index++] = (byte) coordinateHeader.getCompanyName().charAt(4);
            bytes[index++] = (byte) coordinateHeader.getCompanyName().charAt(5);
            bytes[index++] = (byte) coordinateHeader.getCompanyName().charAt(6);
            bytes[index++] = (byte) coordinateHeader.getCompanyName().charAt(7);
            // Total points
            bytes[index++] = getHighByte(coordinateHeader.getTotalPoints());
            bytes[index++] = getLowByte(coordinateHeader.getTotalPoints());
            // Frame number
            bytes[index++] = getHighByte(coordinateHeader.getFrameNumber());
            bytes[index++] = getLowByte(coordinateHeader.getFrameNumber());
            // Total frames
            bytes[index++] = getHighByte(coordinateHeader.getTotalFrames());
            bytes[index++] = getLowByte(coordinateHeader.getTotalFrames());
            // Scanner head
            bytes[index++] = getHighByte(coordinateHeader.getScannerHead());
            // Reserved future use. Must be 0
            bytes[index++] = 0;

            for(CoordinateData coordinateData : coordinateHeader.getCoordinateData()) {
                // X
                bytes[index++] = getHighByte(coordinateData.getX());
                bytes[index++] = getLowByte(coordinateData.getX());
                // Y
                bytes[index++] = getHighByte(coordinateData.getY());
                bytes[index++] = getLowByte(coordinateData.getY());
                // Z
                bytes[index++] = getHighByte(coordinateData.getZ());
                bytes[index++] = getLowByte(coordinateData.getZ());

                // Status. Blanked and end image data.

                if (coordinateData.isBlanked() || coordinateData.isEndImageData()) {
                    if (coordinateData.isBlanked() && coordinateData.isEndImageData()) {
                        bytes[index++] = (byte)-64;
                    } else if (coordinateData.isBlanked()) {
                        bytes[index++] = (byte)64;
                    } else if (coordinateData.isEndImageData()) {
//                        don't know. bytes[index++] = ;
                    }
                } else {
                    bytes[index++] = 0;
                }
                // Color code
                bytes[index++] = getLowByte(coordinateData.getColorData().getCode());
            }
        }
    }