|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
01.12.2008, 00:59 | #1 |
Форумчанин
Регистрация: 24.03.2007
Сообщений: 314
|
Оттенки серого
Здравствуйте..
Помогите, пожалуйста, что-то сделать с процедурой... У меня есть процедура преобразования изображения в оттенки серого, которая выложена по всему интернету Код:
1. Оно картинку размером с иконку преобразовывает минуту!! 2. Когда картинка большая, то оно преобразовывает только кусок Можно ли как-то исправить скорость ее выполнения и почему только кусок? Последний раз редактировалось rpy3uH; 03.12.2008 в 10:31. |
01.12.2008, 01:54 | #2 |
Бредовый
Форумчанин
Регистрация: 15.11.2008
Сообщений: 285
|
Отрисовывай все на отдельном tbitmap а итог уже загружай в image.
Чем точнее и проще задан вопрос, тем проще на него получить точный ответ.
|
01.12.2008, 09:11 | #3 |
Android Developer
Старожил Подтвердите свой е-майл
Регистрация: 19.02.2007
Сообщений: 3,708
|
Сколько не говори все бестолку... я вот не пойму я что не четко объясняю... ну или просто меня отказываются слушать ?
это так преамбула Image1.Canvas.Pixels[w, h] := RgbToGray(Image1.Canvas.Pixels[w, h]); - это просто ужас... вы так будите вечность преобразовывать есть два пути: 1. Старый для меня, и не очень функциональный для всех преобразовываем в Bitmap или вроде помниться функция зная HDC канвы получите массив битовых даных через GetDCDIBits вроде так (ну не помню все из MSDN) получаите данные потом зная их формат ну там 24 или 32 бита на пиксель юзаите TRGBQuard или TRGBTriple - в Windows.pas объявлены но юзаите как PRGBQuard и PRGBtriple - т.е. указатель... 2. Юзаем GDI+ создаем GpBitmap - грузит уйму форматов, потом получаем битовые данные в каком вам угодно формате и опять таки юзаем RGBQuard и т.п.... Далее в общем... вы перед вашими циклами указываите на ваши данные битовые например PRGBQuard := Bits ну вы поняли. и далее в цикле просто после обработки данного пикселя делаите инкремент вашей переменной inc(PRGBQuard) ну и в таком духе.... в таком случае можно сделать так же один цикл для скорости. просто умножив ширину на высоту и начинать с 1 to Width * Height. так кода будет меньше и скорость будет больше вы даже удивитесь как возростет скорость обработки. p.s. по данной теме, всем советую переходить от String[Index] на PCHAR(String) + inc(PCHAR) + PCHAR^ - текущий символ, так же скорость будет намного больше чем через [Index]... |
01.12.2008, 09:52 | #4 |
Форумчанин
Регистрация: 22.10.2008
Сообщений: 103
|
Когда-то делал так
Никто не знает больше чем не знаю я
|
02.12.2008, 15:50 | #5 |
Форумчанин
Регистрация: 24.03.2007
Сообщений: 314
|
Всем большое спасибо !!! )))
|