Буфер экрана, функция SetPixel

volw
Offline
Зарегистрирован: 19.09.2021

Друзья, всем доброго времени! Помогите, ткните пальцем, наведите на мысль. Есть буфер кадра состоящий из одномерного массива, условно скажем 128 байт. Собственно кадр состоит из 128 точек по горизонтали и 8 точек(строк) по вертикали Соответственно буфер разбит следующим образом - первые шестнадцать байт первая строка, следующие шестнадцать байт вторая строка и т.д 8 строк. Подскажите, как сделать расчеты функции чтобы я мог записать отдельный бит(пиксель) указав координаты X Y.

uint8_t bufer[]={

//0                                                         -X-                                                                          127

0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, //0 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,//-Y- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00};//7

void SetPixel(uint8_t X, uint8_t Y){

   ????????????????

}

с выводом буфера проблем нет, если я принудительно устанавливаю биты в массиве они отображаются правильно.

b707
Offline
Зарегистрирован: 26.05.2017

А вы пробовали?

volw
Offline
Зарегистрирован: 19.09.2021

b707 пишет:
А вы пробовали?

Пробовал, не получается. Собственно для кого то это пустяк или есть уже готовое решение, опубликуйте и поможете не только мне.

Komandir
Komandir аватар
Offline
Зарегистрирован: 18.08.2018

bufer[16*Y+X/8]|=1<<(X%8)

bufer[16*Y+X/8]|=0x80>>(X%8)

В зависимости от порядка бит в байте

volw
Offline
Зарегистрирован: 19.09.2021

Komandir пишет:

bufer[16*Y+X/8]|=1<<(X%8)

bufer[16*Y+X/8]|=0x80>>(X%8)

В зависимости от порядка бит в байте

Спасибо! огромное

Все работает как надо, проверил в симуляторе.