Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум программистов > Delphi: Общие вопросы > Grey Scale 256 в Delphi |
Автор: ILA 28.9.2002, 09:56 |
Задача: сделать BMP с 1 битом, а не 3 на пиксел, да и чтобы на принтер было легче. Градации серого в RGB ((256*(256+1)+1)*i), i=0..255, но это ж потом 20MB файл переводить в серый при помощи IrfanView или чего другого. А так, чтобы сразу рисовать? Одна из присланных мне версий приложена внизу, но RGB в результате меняются не до 255, а 255/3=85, так что все достаточно черно... Или есть другие радикальные идеи (этот код слишком медленен)? Заранее спасибо за помощь ! procedure TForm1.Button1Click(Sender: TObject); var pal: PLogPalette; hpal: HPALETTE; i: Integer; x,y:integer; begin //генерируем картинку BitBtn1.click; pal:= nil; //чтобы цвет задавался не RGB-значением, //а индексом из палитры: image1.picture.Bitmap.pixelFormat:=pf8bit; //начинаем генерировать серую палитру try // GetMem(pal, sizeof(TLogPalette) + sizeof(TPaletteEntry) * 255); pal.palVersion := $300; pal.palNumEntries := 256; //заполняем палитру градациями серого for i := 0 to 255 do begin pal.palPalEntry[i].peRed := i; pal.palPalEntry[i].peGreen:=i; pal.palPalEntry[i].peBlue :=i; // pal.palPalEntry[i].peFlags:=255; end; //создаем палитру и получаем ее хэнлд (дескриптор) hpal := CreatePalette(pal^); //если все окэээээй, то //новую палитру if hpal <> 0 then image1.picture.Bitmap.Palette := hpal; finally FreeMem(pal); end; //рисуем тестовый серый прямоугольник с меняющейся яркостью: for y:=0 to 25 do for x:=0 to 255 do begin image1.picture.Bitmap.Canvas.Pixels[400+x,125+y]:=x; image1.picture.Bitmap.Canvas.Pixels[400+x,100+y]:=255-x; end; end; |
Автор: Dexter 28.9.2002, 21:35 |
Посмотри на фотощопных сайтах, там есть алгоритм перевода и ЦВ в ЧБ |
Автор: ILA 15.10.2002, 08:39 |
A kak hotelos' by podpravlennyj kod... |
Автор: MuToGeN 15.10.2002, 08:56 | ||
это тебе хочется не совсем подправленный код, а готовую прогу... самое простое (правда, не совсем качественное, но это почти незаметно):
|
Автор: ILA 16.10.2002, 08:53 | ||||
Esli gotovaja programma principial'no otlichaetsja ot nabroska s palette, to da, hochu kusok koda. A zachem (R+G+B)/3 ![]() |