Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2007.07.22;
Скачать: CL | DM;

Вниз

попиксельное изменение   Найти похожие ветки 

 
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;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.028 c
2-1182919428
Человек
2007-06-27 08:43
2007.07.22
Ошибка в SQL


15-1182431476
Predfer
2007-06-21 17:11
2007.07.22
Как можно передать данные в интернете


15-1182343810
Сатир
2007-06-20 16:50
2007.07.22
Удаление альтернативных обозревателей интренета


3-1177134987
roman_ln
2007-04-21 09:56
2007.07.22
DBListBox1 список не активен


11-1166033779
NeeDiGeo
2006-12-13 21:16
2007.07.22
Глобальные клавиши