161
правкаИзменения
AHI
,Добавил разделы про координаты и цвет
*:Устанавливается самим драйвером, а настраивается с помощью функции [[AhiDrawBrushSet]].
=== Координаты ===
Ещё одна вещь, с которой придётся постоянно иметь дело - это точки и области экрана и их координаты.
Координатная система экрана (да и всякой поверхности, тоже!) с точки зрения чипа ATI имеет следующую конфигурацию:
*Начало отсчёта - в левом верхнем углу, отсчёт начинается с нуля
*Ось X направлена вправо
*Ось Y направлена вниз
Два основных объекта для описания координатных положений - это <tt>AHIPOINT_T<tt/> и <tt>AHIRECT_T</tt>:
<pre>
typedef struct
{
INT32 x, y;
} AHIPOINT_T;
typedef struct
{
INT32 x1, y1, x2, y2;
} AHIRECT_T;
</pre>
Если с первым всё понятно - просто задаёт координаты точки по x и y, то <tt>AHIRECT_T</tt>, который задаёт прямоугольную область экрана, стоит рассмотреть чуть подробнее:
*<tt>x1, y1</tt> - координаты левого верхнего угла прямоугольника
*<tt>x2, y2</tt> - правого нижнего
Важное замечание: в отличие от используемой в [[UIS]] системе задания такой области, здесь координаты правого нижнего угла задаются '''не включительно'''!
Например, если x1 = 0, x2 = 32 - это означает, что в область попадут точки с координатами x от 0 до 31.
Чаще всего эти две структуры используются в функциях AHI примерно так:
<pre>
UINT32 AhiDrawBitBlt( AHIDEVCONTEXT_T devCx, AHIRECT_T *dstRect, AHIPOINT_T *srcPt );
</pre>
*<tt>AHIRECT_T</tt> указывает область на целевой поверхности, куда попадёт картинка из поверхности-источника, и именно он задаёт размер картинки.
*<tt>AHIPOINT_T</tt> указывает координаты левого верхнего угла на поверхности-источнике, откуда будет скопирована область, размерами равная размерам прямоугольника <tt>AHIRECT_T</tt>.
=== Цвет ===
Как многие знают, во многих телефонах используются дисплеи с глубиной цвета 16 бит (Покомпонентно: 5 бит на красный, 6 бит на зелёный и 5 - на синий, "RGB565"), а в настольных компьютерах - с глубиной цвета в 24 бита (по 8 бит на каждую компоненту цвета, "RGB888"). Многие привыкли к заданию цвета в 24-битном формате на настольных компьютерах, да и это намного легче, стоит только рассмотреть пример: 0xFACE8D - в 24bpp сразу видно, какая интенсивность цвета на каждой компоненте, а на 16bpp это будет 0xFE71, и ничего не понятно... Вебдизайнеры поймут.
Для облегчения задачи, предусмотрен макрос, который получает из привычного RGB888 цвета - RGB565, например:
<pre>
ATI_565RGB(0xFA, 0xCE, 0x8D);
</pre>
Конечно, пользоваться им необязательно для случаев "чёрного" и "белого" - это 0x0 и 0xFFFF соответственно.
{{Внимание|Нетрудно однако подсчитать, что "белый"(0xFFFF) в RGB565 при переводе обратно в RGB888 будет уже не очень "белым", далеко не 0xFFFFFF. Это полезно иметь в виду, когда работаете с картинками в формате RGB565}}
Возможно, у Вас уже назрел вопрос ещё с первых строк этого раздела, "А как же 18-битные дисплеи, которые ставили, например, на E1?"
Так вот по крайней мере [[W2250]] не имеет поддержки 18-битных поверхностей, чтобы обеспечить использование возможностей такого дисплея, так что это был не более чем маркетинговый ход. Впрочем, это же судя по всему касается и [[LTE2]] телефонов, так как для графики там опять же используются 16-битные поверхности.
=== Инициализация ===
// Установим цвет кисти. Этим цветом будут выводиться наши графические примитивы
AhiDrawBrushFgColorSet(devCx, ATI_565RGB(0,0,255)); // Ярко-синий
// Зададим прямоугольник на экране, который будет залит нашим цветом
rect.x1 = 0;
rect.y1 = 0;