Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2013.06.02;
Скачать: CL | DM;

Вниз

Функция CreateDIBSection Не создается палитра???   Найти похожие ветки 

 
Сергей   (2012-10-30 13:27) [0]

подскажите плз, что я пропустил в этой процедуре, почему не создается палитра?

procedure TForm1.Button2Click(Sender: TObject);
var
 BInfo:  TBITMAPINFO;  //заголовок
 bmp:Graphics.TBitmap;
 i:byte;
 GetDIBPointer:Pointer;
begin

 with Binfo.bmiHeader do
begin
 biBitCount:=8;
 biWidth:=300;  
 biHeight:=300;
 biPlanes:=1;
 biSize:=sizeof (BITMAPINFOHEADER);
 biCompression:=0;
 biSizeImage:=90000;
 biXPelsPerMeter:=0;
 biYPelsPerMeter:=0;
 biClrImportant:=0;  
 biClrUsed:=0;
end;

 for i:=0 to 255 do
begin
 Binfo.bmiColors[i].rgbReserved:=0;
 Binfo.bmiColors[i].rgbRed:=i;
 Binfo.bmiColors[i].rgbGreen:=i;
 Binfo.bmiColors[i].rgbBlue:=i;
end;

  bmp:= Graphics.TBitmap.Create;
  bmp.Handle:= CreateDIBSection(bmp.Canvas.Handle, BInfo, DIB_RGB_COLORS, GetDIBPointer, 0, 0);
  showmessage("Хэндл картинки "+inttostr(bmp.Handle));
  showmessage("Палитра "+inttostr(bmp.Palette));
end;                                  


P.S. FPC 2.6.1 Lazarus 1.1


 
MBo ©   (2012-10-30 14:06) [1]

Логическая палитра при такой операции не создается.
Ее можно построить вручную или функцией PaletteFromDIBColorTable из Graphics.
А зачем понадобилась палитра?


 
Сергей   (2012-10-30 14:14) [2]

насколько понимаю, 8-ми битных bmp-шек без палитры не бывает. ;)
Нужно создать и сохранить рисунок в оттенках серого (размер критичен)


 
Сергей   (2012-10-30 14:32) [3]

создал палитру так: все равно палитры нет
GetMem(Pal,sizeof(PLogPalette)+256*sizeof(TPaletteEntry));
 for i:=0 to 255 do
begin
 Pal^.palPalEntry[i].peBlue:=i;
 Pal^.palPalEntry[i].peGreen:=i;
 Pal^.palPalEntry[i].peRed:=i;
 Pal^.palPalEntry[i].peFlags:=0;
end;
  Pal^.palVersion:=$300;
  Pal^.palNumEntries:=256;

  bmp:= Graphics.TBitmap.Create;
  bmp.Handle:= CreateDIBSection(bmp.Canvas.Handle, BInfo, DIB_RGB_COLORS, GetDIBPointer, 0, 0);
  bmp.Palette:=CreatePalette(Pal^);


 
icWasya ©   (2012-10-30 15:00) [4]

biClrUsed:=256; - не?


 
Сергей   (2012-10-30 15:08) [5]

пробовал, не.


 
MBo ©   (2012-10-30 17:37) [6]

>насколько понимаю, 8-ми битных bmp-шек без палитры не бывает. ;)
>Нужно создать и сохранить рисунок в оттенках серого (размер критичен)

Это не значит, что должен существовать GDI-объект палитры.

Создать битмап.
Задать ему pixeformat pf8bit. При этом битмап станет DIB.
Создать таблицу цветов array[byte] of TRGBQuad, заполнить её, и сделать SetDIBColorTable

Вот, кажется, и все шаги для создания битмапа в оттенках серого


 
Сергей   (2012-10-30 22:57) [7]

Дома поставил delphi7, проверил свой вариант и Ваш, который Вы описали на http://www.delphimaster.net/view/1-51738, палитра создалась в обоих вариантах.
А в Free Pascal - ни  в какую, причем если 8 битное изображение сохранить, получается не 8 битное, а 24-битное, видимо работа с палитрами не поддерживается.


 
SergeyIT ©   (2012-10-31 19:05) [8]

Тогда может самому файл писать, там простой формат.
А если прочитать файл с палитрой, нормально грузится?


 
Сергей   (2012-11-01 11:34) [9]

Грузится нормально и сохраняется тоже, но глубина цвета не меняется 1.bmp - 8 битный, результирующий 2.bmp тоже, несмотря на   b1.PixelFormat:=pf24bit;
PixelFormat не влияет ни на что, наверно здесь какие-то другие методы искать нужно

 b, b1:Tbitmap;
begin
 b:=Tbitmap.Create;
 b1:=Tbitmap.Create;
 b1.PixelFormat:=pf24bit;
 b.LoadFromFile("d:\1.bmp");
 b1.Assign(b);
 b1.SaveToFile("d:\2.bmp");
end;  


 
SergeyIT ©   (2012-11-01 12:21) [10]

Так вроде
b.LoadFromFile("d:\1.bmp");
Отменяет действие b1.PixelFormat:=pf24bit; и устанавливает формат из файла... или я не прав


 
Сергей   (2012-11-01 13:34) [11]

var b, b1:Tbitmap;
begin
b:=Tbitmap.Create;
b1:=Tbitmap.Create;
b.LoadFromFile("d:\1.bmp");
b1.Assign(b);
b1.PixelFormat:=pf24bit;
b1.SaveToFile("d:\2.bmp");
end;  


от перестановки ничего не меняется


 
Сергей   (2012-11-01 13:35) [12]

Ладно, черт с ним, уже в Delphi сделал все, что было нужно.



Страницы: 1 вся ветка

Текущий архив: 2013.06.02;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.009 c
15-1359103131
DevilDevil
2013-01-25 12:38
2013.06.02
Оптимальный размер буфера для чтения/записи файла


15-1359156796
Дмитрий С
2013-01-26 03:33
2013.06.02
как передается array of const?


15-1359384923
Error0xDEADBEEF
2013-01-28 18:55
2013.06.02
Пересесть с Delphi на Java/Android


15-1358926991
Потапыч
2013-01-23 11:43
2013.06.02
Как программно отключить UAC?


2-1351951397
Тимофеич
2012-11-03 18:03
2013.06.02
Проблема сравнения дат