Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2006.09.24;
Скачать: [xml.tar.bz2];

Вниз

Можно ли?   Найти похожие ветки 

 
apl   (2006-08-10 12:41) [0]

Подскажите, как можно преобразовать цветовую модель у очень большого кол-ва небольших графических файлов. Допустим из RGB в Grayscale256.
Задача разовая, не хотелось-бы тратить время на отладку подобного. Возможно ли это сделать при помощи TImage (как варианты - компоненты OrImage, ImageEn)


 
Jeer ©   (2006-08-10 13:45) [1]

RGB и GrayScale256 - одна и та же цветовая модель, т.е. RGB.

Если разовая задача, то и программировать незачем.
Фотошоп + скрипт или аналогичные.

Если приспичило в Delphi - достаточно TBitmap.LoadFromFile и
попиксельно:

function RGB2Gray(pxs: TColor) : TColor;
var pxt: Byte;
begin
 pxt := round((0.30 * GetRValue(pxs)) +
                  (0.59 * GetGValue(pxs)) +
                 (0.11 * GetBValue(pxs)));
 Result := RGB(pxt, pxt, pxt);
end;


 
antonn ©   (2006-08-10 18:01) [2]

воспользоваться сканлайном:
procedure PrepareBitmap(var _B_out:Tbitmap);
const  MaxPixelCount = MaxInt div SizeOf(TRGBTriple);
type  PRGBArray = ^TRGBArray;
 TRGBArray = array[0..MaxPixelCount-1] of TRGBTriple;
var x, y: Integer; RowOut: PRGBArray;
begin
 _B_out.PixelFormat:=pf24bit;
 for y:=0 to _B_out.Height-1 do begin
    RowOut:= _B_out.ScanLine[y];
   for x:=0 to _B_out.Width-1 do begin
         //веса взял из [1], т.к не помню их. Вроде еще нужно умножить на (100/255)
         RowOut[x].rgbtRed:=round(RowOut[x].rgbtRed*0.30);
         RowOut[x].rgbtGreen:=round(RowOut[x].rgbtGreen*0.59);
         RowOut[x].rgbtBlue:=round(RowOut[x].rgbtBlue*0.11);
   end;
 end
end;


и вызывать ее для всех битмапов, примерно так:
var i:integer; ST:TStrings; _BT:TBitmap;
begin
_BT:=Tbitmap.create;
try
//тут в ST нужно поместить пути к bmp-файлам (из opendialogs или еще как...)
for i:=0 to ST.items.count-1 do begin
 _BT.loadfromfile(ST.strings[i]);
 PrepareBitmap(_BT);
 _BT.savetofile(ST.strings[i]+"_pr.bmp");
end;
finally
 _BT.free;
end;
end;


 
Jeer ©   (2006-08-10 18:29) [3]


> //веса взял из [1], т.к не помню их. Вроде еще нужно умножить
> на (100/255)


Не поверишь, но байт умноженный на double и приведенный к целому, наложенному опять же на байт - никак больше, чем 255 не даст.


 
Don Nikola ©   (2006-08-10 21:00) [4]

А с каких пор умножение нецелых+округление стало быстрее умножения целых+сдвиг?


 
Styx_   (2006-08-10 21:14) [5]

А может, проще макрос в Photoshop сделать?


 
antonn ©   (2006-08-11 04:22) [6]

Jeer ©   (10.08.06 18:29) [3]
я не проверял, у меня дельфи уже нет, и по памяти в час ночи тоже не очень пишется:)
а вообще, побоялся, чтобы цвет был не больше 255, а был слишком маленький, вот и комментнул на всякий случай:)
еще забыл написать ST:=TStringlist.create; и ST.free;

Don Nikola ©   (10.08.06 21:00) [4]
а где утверждалось что либо подобное?


 
Don Nikola ©   (2006-08-11 04:46) [7]

2antonn:
прямо нигде, но все примеры с флоатами.
потом эти примеры по инету расползутся, кто-то их использует как-есть, сделает "поделку из лобзика", увидет скорость и начнет вопить "дельфи ацтой". вот такой вот страшный масонский заговор по дискредитации дельфей.

p.s.: ;)


 
Jeer ©   (2006-08-11 10:23) [8]

Don Nikola ©   (11.08.06 04:46) [7]

Кривым мозгам туда и дорога.



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

Форум: "Основная";
Текущий архив: 2006.09.24;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.46 MB
Время: 0.04 c
11-1133308723
Neiroman
2005-11-30 02:58
2006.09.24
Справочник по KOL


6-1146596297
Evereve
2006-05-02 22:58
2006.09.24
блокировать соединение с Интернетом


15-1157019915
Idiot
2006-08-31 14:25
2006.09.24
Есть ли что то на подобе процедуры VAL в БД ....


2-1157458352
barakuda
2006-09-05 16:12
2006.09.24
Запрос чегото, нетого ...


2-1157140553
Vovan#1
2006-09-01 23:55
2006.09.24
Сравнить record ы





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский