Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 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
3-1177079096
roman_ln
2007-04-20 18:24
2007.07.22
TDBNavigator как обработать событие кнопки


3-1176900325
DmitrichJ
2007-04-18 16:45
2007.07.22
Большие картинки в БД


4-1171500406
Serega41
2007-02-15 03:46
2007.07.22
TreeView: Как получить изображение "+"?


2-1176793044
ak-82
2007-04-17 10:57
2007.07.22
Ошибка синтаксиса в предложении FROM


2-1182851785
trace
2007-06-26 13:56
2007.07.22
как можно корректно определить, что за указателем есть объект





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский