Главная страница
    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.003 c
15-1300486988
Иксик
2011-03-19 01:23
2011.07.03
Вот когда надо написать Карлосу Гомесу, откуда знать где имя,


2-1301068831
johnjar
2011-03-25 19:00
2011.07.03
Сокеты через интернет


2-1301080427
DenKa
2011-03-25 22:13
2011.07.03
Вписать картинку в рамку с закругленными краями


2-1301060385
fynjy93
2011-03-25 16:39
2011.07.03
sql запрос - проблема разделения на части


2-1301232928
картман
2011-03-27 17:35
2011.07.03
как правильно с точки зрения ООП





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