Главная Главная страница форума Регистрация Вход
Новые сообщения Участники форума Правила форума Поиск
Страница 1 из 11
Модератор форума: Admin 
Форум » Все о Delphi » Графика и игры » Переколбас 17010000 пикселей секунд за 5, хотябы... (Ну вот КАК? Я не знаю... %))
Переколбас 17010000 пикселей секунд за 5, хотябы...
DJ_ЕвсДата: Среда, 11.02.2009, 19:29 | Сообщение # 1
Ранг 6
Группа: Проверенные
Сообщений: 165
Награды: 3
Репутация: 1
Статус: Offline
Имеется 189 картинок 300х300. Каждую нужно вытащить, запихать в БитМап, каждому пикселю поменять цвет по формуле, после чего запихнуть обратно в DXImageList. Всё бы ничего, но на эту операцию уходит порядка 1-2 минуты! Можно сойти с ума за это время... Как сделать побыстрее?

ПРОЙДИ ТЕСТ!!!!!
http://FIDO20.ru/test.php?4052&c=bbea2a1

 
EkzДата: Среда, 11.02.2009, 20:30 | Сообщение # 2
Ранг 10
Группа: Пользователи
Сообщений: 164
Награды: 2
Репутация: 1
Статус: Offline
Сократить количество картинок)) Или сделать в несколько потоков обработку.
 
DJ_ЕвсДата: Среда, 11.02.2009, 20:34 | Сообщение # 3
Ранг 6
Группа: Проверенные
Сообщений: 165
Награды: 3
Репутация: 1
Статус: Offline
Quote (Ekz)
Сократить количество картинок)) Или сделать в несколько потоков обработку.

Не вариант. Количество картинок не может быть меньше, ибо каждая из них должна в итоге получиться уникальной! В этом весь смысл обработки.
В несколько потоков - вряд ли. Пока дойдёт до обработки, например, изображения №32, скажем, её уже давно надо будет отобразить в обработанном виде!


ПРОЙДИ ТЕСТ!!!!!
http://FIDO20.ru/test.php?4052&c=bbea2a1

 
EkzДата: Среда, 11.02.2009, 20:38 | Сообщение # 4
Ранг 10
Группа: Пользователи
Сообщений: 164
Награды: 2
Репутация: 1
Статус: Offline
Quote (DJ_Евс)
т по формуле, после чего запихнуть обратно в DXImageList

Так пусть они тут лежат пока все не обработаются.
 
EkzДата: Среда, 11.02.2009, 20:41 | Сообщение # 5
Ранг 10
Группа: Пользователи
Сообщений: 164
Награды: 2
Репутация: 1
Статус: Offline
Quote (DJ_Евс)
Количество картинок не может быть меньше, ибо каждая из них должна в итоге получиться уникальной

ГЫГЫГЫ. Ты чушь сморозил)))Если программа делает картинку уникальной, то "уникальность " не зависит от их количества))
 
AdminДата: Среда, 11.02.2009, 20:44 | Сообщение # 6
Ранг 10
Группа: Пользователи
Сообщений: 1268
Награды: 16
Репутация: 2
Статус: Offline
попробуй использовать как тут. Пример ниже. Инвертирует цвета махом 1280*1024 картинку. Может поможет.
Code
procedure InvertBitmap(Bitmap: TBitmap);
type
    TRGB = record
      B, G, R: Byte;
    end;
    pRGB = ^TRGB;
var
    x, y: Integer;
    Dest: pRGB;
begin
    Bitmap.PixelFormat := pf24Bit;
    for y := 0 to Bitmap.Height - 1 do
    begin
      Dest := Bitmap.ScanLine[y];
      for x := 0 to Bitmap.Width - 1 do
      begin
        with Dest^ do
        begin
          R := 255 - R;
          G := 255 - G;
          B := 255 - B;
        end;
        Inc(Dest);
      end;
    end;

    form1.Image1.Picture.Bitmap.Assign(Bitmap);
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
    InvertBitmap(Image1.Picture.Bitmap);
end;


Не оказываю помощь через личные сообщения и ICQ
 
DJ_ЕвсДата: Среда, 11.02.2009, 20:50 | Сообщение # 7
Ранг 6
Группа: Проверенные
Сообщений: 165
Награды: 3
Репутация: 1
Статус: Offline
Admin, самый умный человек в мире!!! Серёга! ТЫ ГЕНИЙ!!!!!

ПРОЙДИ ТЕСТ!!!!!
http://FIDO20.ru/test.php?4052&c=bbea2a1

 
AdminДата: Среда, 11.02.2009, 21:15 | Сообщение # 8
Ранг 10
Группа: Пользователи
Сообщений: 1268
Награды: 16
Репутация: 2
Статус: Offline
Да ладно.... shy
А че помогло? Кстати коддинг не мой. smile Такчто я тут не причем.


Не оказываю помощь через личные сообщения и ICQ
 
DJ_ЕвсДата: Среда, 11.02.2009, 23:35 | Сообщение # 9
Ранг 6
Группа: Проверенные
Сообщений: 165
Награды: 3
Репутация: 1
Статус: Offline
Admin, оно помогло бы... Но, блин, 189 картинок... Это в таком методе, получается, что высота картинки 189х300. Выдаётся "дебаггер ексепше" какой-то сразу. Но! Я уже придумал, как решить. Надо только узнать, как очистить Dest^ и начать его заново. Не поможешь?

ПРОЙДИ ТЕСТ!!!!!
http://FIDO20.ru/test.php?4052&c=bbea2a1

 
AdminДата: Четверг, 12.02.2009, 08:52 | Сообщение # 10
Ранг 10
Группа: Пользователи
Сообщений: 1268
Награды: 16
Репутация: 2
Статус: Offline
Зачем его очищать? Просто тут переприсваивается содержимое. Гдето у тебя в коде наверное ошибка

Не оказываю помощь через личные сообщения и ICQ
 
DJ_ЕвсДата: Четверг, 12.02.2009, 18:29 | Сообщение # 11
Ранг 6
Группа: Проверенные
Сообщений: 165
Награды: 3
Репутация: 1
Статус: Offline
Всё! решена проблема! КОД СУПЕР!!!! Работает просто с невероятной скоростью! 17010000 пикселов за 1,5-2 секунды!

ПРОЙДИ ТЕСТ!!!!!
http://FIDO20.ru/test.php?4052&c=bbea2a1

 
Форум » Все о Delphi » Графика и игры » Переколбас 17010000 пикселей секунд за 5, хотябы... (Ну вот КАК? Я не знаю... %))
Страница 1 из 11
Поиск:

Copyright DelphiDevelop.ru © 2008-2018
Хостинг от uCoz