IPB
ЛогинПароль:

> ВНИМАНИЕ!

Прежде чем задать вопрос, смотрите FAQ.
Рекомендуем загрузить DRKB.

Наладить общение поможет, если вы подпишитесь по почте на новые темы в этом форуме.

 
 Ответить  Открыть новую тему 
> CreatePalette, ERROR_NOT_ENOUGH_MEMORY?!
сообщение
Сообщение #1


Злостный любитель
*****

Группа: Пользователи
Сообщений: 1 755
Пол: Мужской

Репутация: -  62  +


Решил я из 32-битного БМП сделать 4-битный, и чтобы при этом применялась не абы какая палитра, а умная, найденная квантованием цвета. Ну составил я палитру, а дальше какие-то что технические закидоны пошли:

type
T4Arr = array [0 .. 3] of byte;
P4Arr = ^T4Arr;
TPalette = array [0 .. 15] of T4Arr;

var
pal: record
version: word;
num: word;
a: TPalette
end;

pal_: LOGPALETTE absolute pal;
// работать сразу с LOGPALETTE нельзя из-за длины массива в 1 элемент

H: HPALETTE;

B: TBitmap;

begin
...
pal.version := 0;
pal.num := 16;
pal.a := Palette;

H := CreatePalette( pal_ ); // возвращает 0

Caption := IntToStr(GetLastError); // выводит 8

B.PixelFormat := pf4bit; // в таком порядке, или наоборот, я не знаю?
B.Palette := H;
end;



Почему так?
Я прочитал msdn, но это не помогло, так как там нет рабочего примера. Что писать в номер версии, и что это вообще за поле (зачем оно вообще), я тоже не понял, там ничего не написано. Я пробовал гуглить, но гугл выдал кучу бесплезных сайтов, с 1 строчкой типа "CreatePalette - создаёт палитру по структуре LOGPALETTE" (причём слово LOGPALETTE даже синим не подчёркнуто, перейти нельзя). Ай спасибо, блин, Капитан Очевидность!

Так вот, как правильно создавать палитру, и что означает ошибка 8 (то есть, если верить msdn, ERROR_NOT_ENOUGH_MEMORY)?


--------------------
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #2


Гуру
*****

Группа: Пользователи
Сообщений: 1 013
Пол: Мужской
Ада: Разработчик
Embarcadero Delphi: Сторонник
Free Pascal: Разработчик

Репутация: -  627  +


Pal.Version установи в $0300, этот формат палитры еще с Windows 3.0 пошел, и с тех пор не меняется, отсюда и эта "магическая константа".

Цитата
в таком порядке, или наоборот, я не знаю?
В таком, сначала - формат, потом - палитра.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #3


Злостный любитель
*****

Группа: Пользователи
Сообщений: 1 755
Пол: Мужской

Репутация: -  62  +


О, спасибо, $0300 заработало.
Оказывается, в МСДН это тоже написано. В самом низу страницы. Я это понял, ища глазами число $0300. А не знал бы - не понял бы, что надо прочитать до самого конца.


--------------------
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 





- Текстовая версия 9.05.2024 4:50
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name