Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2011.07.03;
Скачать: [xml.tar.bz2];

Вниз

Есть какие нибудь известные грабли Graphics и много-поточности.   Найти похожие ветки 

 
Дмитрий С ©   (2011-03-24 12:25) [0]

Обрабатываю изображение в несколько потоков. В основном это работа с TBitmap.ScanLine, TBitmap.Canvas.Draw и StretchBlt. У каждого потока свои ресурсы. К общей картинке, которая обрабатывается, доступ синхронизирован.
И почему-то в потоке иногда теряется изображение. Просто нет его и все.
Может есть грабли известные?

Программа для составления мозайки из мелких изображений.
Могу выложить исходник, если нужно.


 
brother ©   (2011-03-24 12:32) [1]

любопытно


 
Игорь Шевченко ©   (2011-03-24 12:55) [2]


> Есть какие нибудь известные грабли Graphics и много-поточности


http://www.transl-gunsmoker.ru/2011/02/thread-affinity-of-user-interface_06.html
http://www.transl-gunsmoker.ru/2011/02/thread-affinity-of-user-interface_08.html


 
MonoLife ©   (2011-03-24 15:31) [3]


> Дмитрий С ©   (24.03.11 12:25)  

любопытно, на сколько долго происходит обработка картинки, кусочков.. что там еще "сканлайнится", если не использовать доп. потоки?


 
Дмитрий С ©   (2011-03-24 20:01) [4]


> Игорь Шевченко ©   (24.03.11 12:55) [2]

проблема видимо в самом дельфи, при определенных условиях XXX.canvas.handle становится невалидным. Вспомнить почему не получилось.


> MonoLife ©   (24.03.11 15:31) [3]

Суть такая:
Берется много маленьких фоток (я взял уменьшенные аватарки друзей вкотнакте). Все они 100х100. Уменьшаются до размеров ячейки мозайки. (обычно это 16 на 16 точек у меня).
Берем большую фотку, которую хотим получить. Далее я ее буду называть оригиналом.
Затем по порядку слева направо сверху вниз с берутся кусочки оригинала 16 на 16. Каждый кусочек сравнивается с каждой маленькой фоткой определенным способом и наиболее соответствующая подставляется на место оригинала.

Алгоритм сравнения такой: Берется кусочек с оригинала и одна из маленьких фоток. Обе уменьшаются до размеров 4х4 точки. Для каждой точки находится SQRT(SQR(R_orig  - R_test) + SQR(G_orig  - G_test) + SQR(B_orig  - B_test)), суммируются. Получается значение соответствия изображений.
Ну и для какой маленький картинки значение соответствия больше - так и выбирается.
Есть еще дополнительные правила: две одинаковых картинки не могут стоять рядом; для каждой маленькой картинки создаются еще штук 7 копий разной яркости.

Вобщем алгоритм сравнения я хотел распараллелить, но похоже время потерял. В итоге оптимизировал однопоточный алгоритм, работает очень быстро.


 
Eraser ©   (2011-03-24 20:09) [5]

> [0] Дмитрий С ©   (24.03.11 12:25)

Есть там несколько серьезных граблей. Помню долго искал баги, которые из-за них. Например, при смене разрешения экрана или цветовой палитры - какие-то GDI объекты пересоздаются.. больше граблей так на вскидку не помню, но они есть.


 
antonn ©   (2011-03-24 22:55) [6]

А я думал что я один такой криворукий =)
Сделал свой битмап, с блэкдэеком и шлю...со своим сканлайном, тупо массив :)


 
Loginov Dmitry ©   (2011-03-25 17:36) [7]


> И почему-то в потоке иногда теряется изображение. Просто
> нет его и все.
> Может есть грабли известные?


Все обращения из дополнительного потока к методам канвы объекта TBitmap должны быть заключены между
Bitmap.Canvas.Lock
и
Bitmap.Canvas.Unlock



Страницы: 1 вся ветка

Форум: "Начинающим";
Текущий архив: 2011.07.03;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.46 MB
Время: 0.01 c
15-1291142271
xayam
2010-11-30 21:37
2011.07.03
Как ускорить индексирование сайта поисковиками?


15-1300483790
Юрий
2011-03-19 00:29
2011.07.03
С днем рождения ! 19 марта 2011 суббота


1-1258707280
4el0vek
2009-11-20 11:54
2011.07.03
TStreamReader | TStream | Проблема с чтением потока


15-1299283968
dmk
2011-03-05 03:12
2011.07.03
Локализация DELPHI


15-1300084811
smart
2011-03-14 09:40
2011.07.03
xml не отображает кириллицу





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