Модераторы: Poseidon, Snowy, bems, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Grey Scale 256 в Delphi, Как сделать градации серого? 
:(
    Опции темы
ILA
Дата 28.9.2002, 09:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 14
Регистрация: 28.9.2002

Репутация: нет
Всего: нет



Задача: сделать 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;
PM MAIL   Вверх
Dexter
Дата 28.9.2002, 21:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Экс. модератор
Сообщений: 1562
Регистрация: 2.7.2002
Где: Москва, Бирюлево

Репутация: 1
Всего: 4



Посмотри на фотощопных сайтах,
там есть алгоритм перевода и ЦВ в ЧБ


--------------------
The only thing you really know about me is...
...that's all you'll ever know
PM MAIL ICQ   Вверх
ILA
Дата 15.10.2002, 08:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 14
Регистрация: 28.9.2002

Репутация: нет
Всего: нет



A kak hotelos' by podpravlennyj kod...
PM MAIL   Вверх
MuToGeN
Дата 15.10.2002, 08:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Лесник
****


Профиль
Группа: Модератор
Сообщений: 4379
Регистрация: 15.8.2002
Где: Москва

Репутация: нет
Всего: 32



это тебе хочется не совсем подправленный код, а готовую прогу...
самое простое (правда, не совсем качественное, но это почти незаметно):
Код
Grayscale := (R + G + B) / 3;
среднее арифметическое, то есть.


--------------------
Three pings for the token rings,
Five pings for the UNIX machines,
Hundred pings for the broken links,
One special ping to check them all
Through Simple Network Management Protocol!
PM MAIL ICQ   Вверх
ILA
Дата 16.10.2002, 08:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 14
Регистрация: 28.9.2002

Репутация: нет
Всего: нет



Цитата(MuToGeN @ 15.10.2002, 01:56)
это тебе хочется не совсем подправленный код, а готовую прогу...
самое простое (правда, не совсем качественное, но это почти незаметно):
Код
Grayscale := (R + G + B) / 3;
среднее арифметическое, то есть.

Esli gotovaja programma principial'no otlichaetsja ot nabroska s palette, to da, hochu kusok koda.

A zachem (R+G+B)/3 ??? I hochu _sozdavat'_ risunki srazu v greyscale, a RGB->Grey i pri pomozhi IrfanView sdelat' bez problem.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0638 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.