Форум: "Основная";
Текущий архив: 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