Как определить, что курсор отличается от фреймбуфера?
Курсор находится в буфере кадров. Он не может быть в другом формате, чем он сам.
Невозможно определить, в каком формате он находится (x-radar: // problem / 7751503). Был бы способ угадать, по крайней мере, количество байтов на пиксель, если бы вы могли сказать, сколько кадров имеет курсор, но так как вы не можете (эта информация не установлена по состоянию на 10.6.1 - x-radar: / / problem / 7751530), вам остается попытаться определить два фактора четырехфакторного произведения (байт на пиксель × ширина × высота × количество кадров, где у вас есть только ширина, высота и произведение). И даже если вы сможете выяснить эти недостающие два фактора, вы все равно не будете знать, в каком порядке расположены байты или предварительно умножены компоненты цвета альфа-компонентом.
Где я могу прочитать фактические данные о пикселях?
В элементе cursor
структуры общей памяти курсора.
Вы должны определить IOFB_ARBITRARY_SIZE_CURSOR
перед включением заголовков I / O Kit. Курсоры могут быть любого размера, а не только 16 × 16, то есть того размера, который вы ожидаете, когда не определяете эту константу. Например, обычный курсор стрелки Mac - 24 × 24, курсор стрелки «Windows» в CrossOver - 32 × 32, а курсор стрелки в X11 - 10 × 16.
Однако в некоторых случаях я читаю данные, похожие на маску. В частности, пиксели в этих данных будут либо 0x00FFFFFF
, либо 0x00000000
. Мне кажется, это маска для отдельных данных пикселей, хранящихся где-то еще.
Для меня это больше похоже на 16-битные пиксели с 8-битным альфа-каналом. По крайней мере, это скорее 5-6-5, чем 5-5-5.
Насколько я могу судить, единственное приложение, которое использует этот пиксельный формат курсора, это Qt Creator, но мне нужно работать со всеми приложениями, поэтому я бы хотел разобраться с этим.
Я могу захватить текущий курсор в этом приложении, с помощью моего нового приложения для захвата курсора . Есть ли какая-то конкретная часть приложения, которую я должен нажать, чтобы он показывал мне определенный курсор?