diff --git a/pyflipdot/data.py b/pyflipdot/data.py
index df3ccf7..b26b05f 100644
--- a/pyflipdot/data.py
+++ b/pyflipdot/data.py
@@ -148,10 +148,16 @@ class ImagePacket(Packet):
         message_image = np.zeros((data_rows, columns), dtype=bool)
         message_image[:rows, :columns] = image
 
-        # Flip image (we send column major, starting 'bottom left')
+        # Flip image vertically
+        # Our image is little-endian (0,0 contains least significant bit)
+        # Packbits expects array to be big-endian
         message_image = np.flipud(message_image)
 
-        # Flatten 'column major', so a whole column of pixels are sent together
+        # Interpret the boolean array as bits in a byte
         # Note: we 'view' as uin8 for numpy versions < 1.10 that don't accept
         # boolean arrays to packbits
-        return bytes(np.packbits(message_image.flatten('F').view(np.uint8)))
+        byte_values = np.packbits(message_image.view(np.uint8), axis=0)
+
+        # Flip vertically so that we send the least significant byte first
+        # Flatten 'column major', so a whole column of pixels are sent together
+        return bytes(np.flipud(byte_values).flatten("F"))

On larger signs 0,0 is displayed as 0,9
I have a 96x16 Hanover sign. This code works perfectly except that it starts on the 9 dot from the top. 

To replicate I push a numpy array that is only the first pixel as true. Such as: 

      [[ True False False ... False False False]
      [False False False ... False False False]
      [False False False ... False False False]
      ...
      [False False False ... False False False]
      [False False False ... False False False]
      [False False False ... False False False]]

The result is that the one dot is rendered mid sign instead of 0,0 as i would expect. 

Photo: 

![Screenshot from 2019-06-24 15-03-13](https://user-images.githubusercontent.com/18504/60048206-4004ee00-9691-11e9-8092-a51ed23cb217.png)

here it is using the textwriter.py to display the time: 
![Screenshot from 2019-06-24 15-03-23](https://user-images.githubusercontent.com/18504/60048227-4b581980-9691-11e9-926c-9ffc906b9d67.png)

Let me know if you have ideas on how to fix. I don't mind doing the work - but don't know where to start without starting from scratch. 

Thanks for the lib. it is much better than the alternatives ;)
diff --git a/tests/test_data.py b/tests/test_data.py
index 791b2a0..011a49f 100644
--- a/tests/test_data.py
+++ b/tests/test_data.py
@@ -21,14 +21,10 @@ class TestPackets(object):
 
     def test_image(self):
         # Send an image as below ('p' indicates byte alignment padding)
-        # (0) | 1, 0 |    | p, p |
-        # (1) | 0, 0 | -> | p, p |
-        # (2) | 0, 0 |    | p, p |
-        # (3) | 0, 0 |    | p, p |
-        # (4)             | p, p |
-        # (5)             | 0, 0 |
-        # (6)             | 0, 0 |
-        # (7)             | 1, 0 |
+        # (0) | 1, 0 |
+        # (1) | 0, 0 | -> [0x01, 0x00]
+        # (2) | 0, 0 |
+        # (3) | 0, 0 |
         image = np.full((3, 2), False)
         image[0, 0] = True
 
@@ -38,26 +34,25 @@ class TestPackets(object):
 
     def test_tall_image(self):
         # Send an image as below ('p' indicates byte alignment padding)
-        # (0)  | 1, 0 |    | p, p |
-        # (1)  | 0, 0 |    | 0, 0 |
-        # (2)  | 0, 0 |    | 0, 0 |
-        # (3)  | 0, 0 |    | 0, 0 |
-        # (4)  | 0, 0 |    | 0, 0 |
-        # (5)  | 0, 0 |    | 0, 0 |
-        # (6)  | 0, 0 |    | 1, 0 |
-        # (7)  | 0, 0 | -> | 0, 0 |
-        # (8)  | 0, 0 |    | 0, 0 |
-        # (9)  | 1, 0 |    | 0, 0 |
-        # (10) | 0, 0 |    | 0, 0 |
-        # (11) | 0, 0 |    | 0, 0 |
-        # (12) | 0, 0 |    | 0, 0 |
-        # (13) | 0, 0 |    | 0, 0 |
-        # (14) | 0, 0 |    | 0, 0 |
-        # (15)             | 1, 0 |
+        # (0)  | 1, 0 |
+        # (1)  | 0, 0 |
+        # (2)  | 0, 0 |
+        # (3)  | 0, 0 |
+        # (4)  | 0, 0 |
+        # (5)  | 0, 0 |
+        # (6)  | 0, 0 |
+        # (7)  | 0, 0 | -> | 0x01, 0x00 | -> [0x01, 0x02, 0x00, 0x00]
+        # (8)  | 0, 0 |    | 0x02, 0x00 |
+        # (9)  | 1, 0 |
+        # (10) | 0, 0 |
+        # (11) | 0, 0 |
+        # (12) | 0, 0 |
+        # (13) | 0, 0 |
+        # (14) | 0, 0 |
         image = np.full((15, 2), False)
-        image[0, 0] = True  # MSbit of MSbyte
-        image[9, 0] = True  # MSbit for LSbyte
+        image[0, 0] = True
+        image[9, 0] = True
 
         packet = ImagePacket(1, image)
         packet_data = packet.get_bytes()
-        assert packet_data == b'\x02110402010000\x03B4'
+        assert packet_data == b'\x02110401020000\x03B4'

pip install -e .[dev]
parse_log_pytest
Pipfile
pytest pytest-cov pytest-xdist
3.7
pytest --no-header -rA --tb=line --color=no -p no:cacheprovider -W ignore::DeprecationWarning
certifi @ file:///croot/certifi_1671487769961/work/certifi
coverage==7.2.7
exceptiongroup==1.2.2
execnet==2.0.2
importlib-metadata==6.7.0
iniconfig==2.0.0
numpy==1.21.6
packaging==24.0
pipfile==0.0.2
pluggy==1.2.0
-e git+https://github.com/briggySmalls/pyflipdot.git@9f3b8dafe3961396f548f1172ef5eb73350638ec#egg=pyflipdot
pyserial==3.5
pytest==7.4.4
pytest-cov==4.1.0
pytest-xdist==3.5.0
toml @ file:///tmp/build/80754af9/toml_1616166611790/work
tomli==2.0.1
typing_extensions==4.7.1
zipp==3.15.0

name: pyflipdot
channels:
  - defaults
  - https://repo.anaconda.com/pkgs/main
  - https://repo.anaconda.com/pkgs/r
  - conda-forge
dependencies:
  - _libgcc_mutex=0.1=main
  - _openmp_mutex=5.1=1_gnu
  - ca-certificates=2025.2.25=h06a4308_0
  - certifi=2022.12.7=py37h06a4308_0
  - ld_impl_linux-64=2.40=h12ee557_0
  - libffi=3.4.4=h6a678d5_1
  - libgcc-ng=11.2.0=h1234567_1
  - libgomp=11.2.0=h1234567_1
  - libstdcxx-ng=11.2.0=h1234567_1
  - ncurses=6.4=h6a678d5_0
  - openssl=1.1.1w=h7f8727e_0
  - pip=22.3.1=py37h06a4308_0
  - pipfile=0.0.2=py_0
  - python=3.7.16=h7a1cb2a_0
  - readline=8.2=h5eee18b_0
  - setuptools=65.6.3=py37h06a4308_0
  - sqlite=3.45.3=h5eee18b_0
  - tk=8.6.14=h39e8969_0
  - toml=0.10.2=pyhd3eb1b0_0
  - wheel=0.38.4=py37h06a4308_0
  - xz=5.6.4=h5eee18b_1
  - zlib=1.2.13=h5eee18b_1
  - pip:
      - coverage==7.2.7
      - exceptiongroup==1.2.2
      - execnet==2.0.2
      - importlib-metadata==6.7.0
      - iniconfig==2.0.0
      - numpy==1.21.6
      - packaging==24.0
      - pluggy==1.2.0
      - pyserial==3.5
      - pytest==7.4.4
      - pytest-cov==4.1.0
      - pytest-xdist==3.5.0
      - tomli==2.0.1
      - typing-extensions==4.7.1
      - zipp==3.15.0
prefix: /opt/conda/envs/pyflipdot

tests/test_data.py::TestPackets::test_tall_image
tests/test_data.py::TestPackets::test_no_payload tests/test_data.py::TestPackets::test_with_payload tests/test_data.py::TestPackets::test_image
pyflipdot/data.py
pyflipdot/data.py