Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

палитра в bmp


>>DEATH<< ©   (2006-12-20 05:10:00) 

подскажите как поменять количество цветов в image1..надо цветную картинку перевести в чернобелую


Vovan #2   (2007-01-07 02:48:00) [1]

Ну начинается. Вопро секундный, а уже с компонентами решения предлагают.


KOSS   (2007-01-07 01:07:00) [2]

оставь свой mail. есть готовый компонент,который отлино работает с image, для преобразования цветовой палитры.


Дмитрий Белькевич   (2007-01-05 04:56:00) [3]

Можешь отсюда дёрнуть палитру, и поменяй pixelformat на pf8bit, например.


function CreateBitmap: TBitmap; // Ýòà ôóíêöèÿ ñîçäàåò Bitmap ñ ïàëèòðîé 256 ãðàäàöèé ñåðîãî.
type
TRGBPalette = array[0..255] of
 packed record
 R, G, B, Reserved: byte;
end;

TBmpFile = packed record
 Hd: TBitmapFileHeader;
 Info: TBitmapInfoHeader;
 Palette: TRGBPalette;
 Data: array[0..255] of byte;
end;

var
f: TBmpFile;
i: word;
s: TMemoryStream;
bmp: TBitmap;
begin
{$IFDEF DEBUG_LOG}
CurrentModule.Add2('GrabThread.CreateBitmap');
{$ENDIF}
bmp := TBitmap.Create;
bmp.PixelFormat := pf8bit;
with f do
begin
 Hd.bfType := $4D42;
 Hd.bfSize := SizeOf(TBmpFile) div 4;
 Hd.bfReserved1 := 0;
 Hd.bfReserved2 := 0;
 Hd.bfOffBits := SizeOf(TBitmapFileHeader) +
  SizeOf(TBitmapInfoHeader) + SizeOf(TRGBPalette);
 Info.biSize := SizeOf(TBitmapInfoHeader);
 Info.biWidth := 16;
 Info.biHeight := 16;
 Info.biPlanes := 1;
 Info.biBitCount := 8;
 Info.biCompression := bi_RGB;
 Info.biSizeImage := 256;
 Info.biXPelsPerMeter := 0;
 Info.biYPelsPerMeter := 0;
 Info.biClrUsed := 0;
 Info.biClrImportant := 0;
 for i := 0 to 255 do
 begin
  Palette[i].R := i;
  Palette[i].G := i;
  Palette[i].B := i;
  Data[i] := i;
 end;
end;
s := TMemoryStream.Create;
try
 s.SetSize(SizeOf(TBmpFile));
 s.Write(f, SizeOf(TBmpFile));
 s.Position := 0;
 bmp.LoadFromStream(S);
finally
 s.Free;
end;
result := bmp;
end;


Stexen   (2006-12-24 14:14:00) [4]

Нужно именно два цвета: черный и белый? или обычная картинка с градациями серого???
Вообще говоря, в некоторых случаях бесполезно использовать изменение палитры. Есть фильтр называется он диффузия ошибки, если память мне не изменяет, хорошо подойдет для преобразование в два цвета.


Vovan #2   (2006-12-20 20:48:00) [5]

> чета все получилось черно синее

Очень даже может быть. Надо установить чёрно-белую палитру. Тут есть пример:
http://www.efg2.com/Lab/ImageProcessing/pf1bit.htm


>>DEATH<<   (2006-12-20 12:35:00) [6]

чета все получилось черно синее


Думкин   (2006-12-20 12:26:00) [7]

Image1.Picture.Bitmap.PixelFormat := pf1bit;


>>DEATH<<   (2006-12-20 12:10:00) [8]

это где писать


>>DEATH<<   (2006-12-20 12:05:00) [9]

это где писать


clickmaker   (2006-12-20 10:19:00) [10]

PixelFormat


Наверх

Титульная страница Поиск, карта сайта Написать письмо