не записывается цвет в bitmap.canvas.pixels[x,y]

Вопросы программирования и использования среды Lazarus.

Модератор: Модераторы

не записывается цвет в bitmap.canvas.pixels[x,y]

Сообщение alu » 27.08.2007 14:40:59

у меня стоит глубина цвета на мониторе 16бит при загрузке битмапа из файла глубиной цвета 24бит (loadfromfile(filename)) видимо выставляется системная глубина цвета, потому что когда я делаю вот это
(исходника сейчас под рукой нет..приблизительно воспроизвожу)

bitmap.loadfromfile(filename);
temp:=bitmap.canvas.pixels[1,1]; //там белый цвет
dec(temp);
bitmap.canvas.pixels[1,1]:=temp;

temp2:=bitmap.canvas.pixels[1,1]; //

В итоге temp<>temp2 , т.е. цвет не поменялся.

Вопрос - как работать в моем случае именно с форматом 24бита, а не системным.
т.е. загрузить в формате 24бита и работать в этом же формате, потом и сохранить в формате 24бита.

bitmap.pixelformat:=pf24bit //до загрузки роли не играет
bitmap.pixelformat:=pf24bit //если после загрузки - безнадежно портит изображение

через временный битмап пробовал, НО нельзя терять младшие биты!!!
Стенографию пытаюсь сделать. (хранить небольшую информацию в изображении).
Аватара пользователя
alu
новенький
 
Сообщения: 33
Зарегистрирован: 15.01.2007 12:54:14
Откуда: Саратов

Сообщение SovNarKom » 27.08.2007 17:40:57

alu
Не используй TCanvas...
SovNarKom
постоялец
 
Сообщения: 389
Зарегистрирован: 28.05.2005 10:37:39
Откуда: Воронеж [vrn] [36]

Сообщение Рождённый_в_СССР » 27.08.2007 17:49:05

вероятнее всего преобразование происходит на функции loadfromfile, так я думаю), проверить не могу...
поэтому вам наверное придётся хранить в буфере 24-битный образ, там же его изменять и по случаю выводить из буфера на экран... это помойму лучше, чем брать цвет из объекта bitmap или возможно отказаться от метода canvas.
Аватара пользователя
Рождённый_в_СССР
новенький
 
Сообщения: 65
Зарегистрирован: 08.08.2007 01:03:26
Откуда: Саратов

Сообщение alu » 27.08.2007 18:07:50

SovNarKom писал(а):alu
Не используй TCanvas...
а что использовать?
Аватара пользователя
alu
новенький
 
Сообщения: 33
Зарегистрирован: 15.01.2007 12:54:14
Откуда: Саратов

Сообщение SovNarKom » 27.08.2007 18:21:03

ОС?
SovNarKom
постоялец
 
Сообщения: 389
Зарегистрирован: 28.05.2005 10:37:39
Откуда: Воронеж [vrn] [36]

Сообщение alu » 28.08.2007 17:47:22

SovNarKom писал(а):ОС?
ОС - кроссплатформенная.))) под Линь и Вин нужно.
в общем, как с файлом работать нужно если я правльно понимаю нить мысли...(
Аватара пользователя
alu
новенький
 
Сообщения: 33
Зарегистрирован: 15.01.2007 12:54:14
Откуда: Саратов

Сообщение SovNarKom » 28.08.2007 18:10:57

alu
Ну не обяхательно как с файлом, какой формат? Вариантов то много на самом деле...

можно даже OpenIL(или как он там сейчас называется) использовать.
SovNarKom
постоялец
 
Сообщения: 389
Зарегистрирован: 28.05.2005 10:37:39
Откуда: Воронеж [vrn] [36]

Сообщение alu » 29.08.2007 09:05:48

SovNarKom писал(а):alu
Ну не обяхательно как с файлом, какой формат? Вариантов то много на самом деле...

можно даже OpenIL(или как он там сейчас называется) использовать.

формат - BMP 24bit
Аватара пользователя
alu
новенький
 
Сообщения: 33
Зарегистрирован: 15.01.2007 12:54:14
Откуда: Саратов

Сообщение alu » 29.08.2007 09:40:53

формат простой, пожалуй через файловые операции работать буду.

вот сам формат - может кому пригодится
заголовок всего 54 байта 14+40
-------------------------------------------------
Заголовок файла 2 байта (всего 14 байт)
Размер файла 4 байта
Не используется 4 байта
С какого байта начало растрового массива 4 байта
Доп. информация (всего 40 байт)
Длина доп.информации 4 байта
Ширина изображения 4 байта
Высота изображения 4 байта
Спец. информация 2 байта
Бит/пиксель 2 байта
Метод сжатия 4 байта
Длина растрового массива 4 байта
Горизонтальное разрешение 4 байта
Вертикальное разрешение 4 байта
Число цветов 4 байта
Число основных цветов 4 байта

Растровый массив - переменный длины верхний левый угол в конце массива.
-------------------------------------------------
Аватара пользователя
alu
новенький
 
Сообщения: 33
Зарегистрирован: 15.01.2007 12:54:14
Откуда: Саратов

Сообщение shade » 29.08.2007 11:33:43

см. юнит fpimage (а именно класс TFPMemoryImage), для четния/записи bmp нужно также подключить fpreadbmp и fpwritebmp соотвественно.
Там можно писать свои ридеры/райтеры для своих форматов.
Аватара пользователя
shade
энтузиаст
 
Сообщения: 879
Зарегистрирован: 21.02.2006 20:15:48
Откуда: http://shamangrad.net/

Сообщение SovNarKom » 29.08.2007 19:06:44

shade
Меня сейчас жутко бесит FCL Classes, ну зачем было повторять ошибки Delphi... непонятно.
SovNarKom
постоялец
 
Сообщения: 389
Зарегистрирован: 28.05.2005 10:37:39
Откуда: Воронеж [vrn] [36]

Сообщение alexs » 29.08.2007 19:10:42

SovNarKom писал(а):Меня сейчас жутко бесит FCL Classes, ну зачем было повторять ошибки Delphi... непонятно.

а чего не так?
в принципе если Classes - то нужна в первую очередь для начала совместимость с дельфи
Аватара пользователя
alexs
долгожитель
 
Сообщения: 4060
Зарегистрирован: 15.05.2005 23:17:07
Откуда: г.Ставрополь

Сообщение SovNarKom » 29.08.2007 19:22:49

alexs
Весь этот объектный подход с ридерами... райтерами...
вот нужно мне загрузить png картинку - сразу в зависимостях Classes -> 100Кб.

По хорошему нужно всю непосредственную работу переносить на более низкий уровень, где был бы просто набор процедур, загружающий нужный формат в некоторый тип данных. А потом это можно было бы и обернуть в Classes, для совместимости.
SovNarKom
постоялец
 
Сообщения: 389
Зарегистрирован: 28.05.2005 10:37:39
Откуда: Воронеж [vrn] [36]

Сообщение alexs » 29.08.2007 20:03:31

может просто поискать другой набор библиотек?
Аватара пользователя
alexs
долгожитель
 
Сообщения: 4060
Зарегистрирован: 15.05.2005 23:17:07
Откуда: г.Ставрополь

Сообщение SovNarKom » 29.08.2007 20:29:38

alexs
Вот именно, может тогда выкинуть FCL в помойку?
SovNarKom
постоялец
 
Сообщения: 389
Зарегистрирован: 28.05.2005 10:37:39
Откуда: Воронеж [vrn] [36]

След.

Вернуться в Lazarus

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 33

Рейтинг@Mail.ru
cron