Форум: "Начинающим";
Текущий архив: 2007.07.22;
Скачать: [xml.tar.bz2];
Внизпопиксельное изменение Найти похожие ветки
← →
bagos © (2007-06-23 07:49) [0]мастера,научите попиксельно изменять цвет, есть картинка 2 цвета,серый и черный, задача такая: нужно поменять серый цвет на белый,я полагаю что это нужно делать попиксельно проверяя чему равен пиксель.
с чего начать не знаю
← →
KilkennyCat © (2007-06-23 08:54) [1]
> с чего начать не знаю
Вероятно, с изучения основ работы с графикой, изучение TCanvas и TBitmap
Изменение цвета пиксела особых трудностей не представляет:Canvas.Pixels[x, y] := TColor;
При простом переборе в цикле попиксельно скорость работы будет оставлять желать лучшего (хотя, при современых-то мощностях... может и хватит).
В этом случае стоит обратить внимание на TBitmap.ScanLine.
И учитывая специфику задачи, возможно, наиболее оптимально будет работать напрямую с файлом (сохраняем картинку как файл формата Bitmap (если она в другом формате), и, осознавая структуру файла, меняем в нем значения серого цвета на значения белого.
← →
Однокамушкин (2007-06-23 09:14) [2]
> KilkennyCat © (23.06.07 08:54) [1]
> При простом переборе в цикле попиксельно скорость работы
> будет оставлять желать лучшего (хотя, при современых-то
> мощностях... может и хватит).
> В этом случае стоит обратить внимание на TBitmap.ScanLine.
Да, ScanLine - это быстрее, но надо сначала убедиться, что HandleType имеет значение bmDIB, потому что в противном случае ScanLine, во-первых, работает очень медленно, а во-вторых, позволяет только читать значения пикселей, но не менять их...
> И учитывая специфику задачи, возможно, наиболее оптимально
> будет работать напрямую с файлом (сохраняем картинку как
> файл формата Bitmap (если она в другом формате), и, осознавая
> структуру файла, меняем в нем значения серого цвета на значения
> белого.
Ну, тут и без файла можно обойтись, сохранять можно в TMemoryStream, структура будет та же, но всё остаётся в памяти...
← →
Инс © (2007-06-23 09:34) [3]Если картинка имеет палитру, до достаточо изменить в последней одно значение. Это будет быстрее всего.
← →
Anatoly Podgoretsky © (2007-06-23 12:36) [4]> bagos (23.06.2007 07:49:00) [0]
Что за картинка, где картинка, какой формат, какие размеры, как много их, как часто надо делать, какие требования к скорости, какие у тебя начальные знания?
← →
homm © (2007-06-24 19:17) [5]> При простом переборе в цикле попиксельно скорость работы
> будет оставлять желать лучшего (хотя, при современых-то
> мощностях... может и хватит).
Современные мощнастя можно тратить и на более полезные вещи, нежели дурь программиста.
← →
KilkennyCat © (2007-06-24 23:02) [6]
> homm © (24.06.07 19:17) [5]
Это ответ по теме?
← →
DVM © (2007-06-24 23:19) [7]
procedure BitmapProcessing(Bmp: TBitmap);
const
PixelCountMax = 32768;
type
pRGBArray = ^TRGBArray;
TRGBArray = array[0..PixelCountMax - 1] of TRGBTriple;
var
r,g,b: byte;
h, w: integer;
Row: pRGBArray;
begin
if bmp.PixelFormat <> pf24bit then exit;
for h := 0 to bmp.height - 1 do
begin
Row := pRGBArray(bmp.Scanline[h]);
for w := 0 to bmp.width - 1 do
begin
r := Row[w]^.rgbtRed;
g := Row[w]^.rgbtGreen;
b := Row[w]^.rgbtBlue;
// Тут делаем все что надо проверяем какой цвет и т.д.
// результат кладем обратно в Row[w]
end;
end;
end;
Не надо забывать только про pf24bit
← →
homm © (2007-06-24 23:27) [8]> Это ответ по теме?
Разве нет? Ты предложил 2 пути, я уточнил что один не верен.
← →
DVM © (2007-06-24 23:38) [9]
> homm © (24.06.07 19:17) [5]
Перебор попиксельно будет в любом случае. Разница лишь в том как эти пикселы брать - поодиночке или скопом. Другого пути нет. Если конечно битмап 24-32 битный.
← →
ppcumax © (2007-06-25 00:06) [10]Вопрос по теме: как узнать цвет пикселя? например Canvas.Pixels[20,20] := Цвет
← →
KilkennyCat © (2007-06-25 00:14) [11]Так и узнать, но наоборот: Цвет := Canvas.Pixels[20,20]
← →
ppcumax © (2007-06-25 00:18) [12]Понял. Спасибо
← →
homm © (2007-06-25 00:19) [13]> Перебор попиксельно будет в любом случае.
Естественно :) В данном случае разговор конкретно о Pixels.
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2007.07.22;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.28 c