Главная страница


ru.linux

 
 - RU.LINUX ---------------------------------------------------------------------
 From : Ilya Anfimov                         2:5020/400     28 Dec 2002  21:38:44
 To : Oleg Goodyckov
 Subject : Re: XCreateImage и XPutImage
 -------------------------------------------------------------------------------- 
 
 On Sat, 28 Dec 2002 08:07:25 +0000 (UTC),
 Oleg Goodyckov <og@videoproject.kiev.ua> wrote:
 
 >On Wed, Dec 25, 2002 at 02:39:34PM +0000, Ilya Anfimov wrote:
 >> On Mon, 23 Dec 2002 10:18:23 +0000 (UTC),
 
 [грустное skipped]
 
 >> >  src1_win.c_image = XCreateImage (XtDisplay (src1_win.root),
 >> >            DefaultVisual (XtDisplay(src1_win.root), 0), 24, ZPixmap,0, 
 >> >      (char*)src1_win.source->channels(1)->frame,
 >> >            src1_win.source->vfmt.fmt.pix.width,      // исх. ширина - 768
 >> >            src1_win.source->vfmt.fmt.pix.height,16,  // исх. высота - 576
 >> >            src1_win.source->vfmt.fmt.pix.width*3*4); // 768/192=4 - новая
 >> 
 >>  Последней  строчки совсем не понял. Откуда тут ещё "*4" взялось?
 >
 >Hу так строка ведь должна быть в четверо длиннее, если я хочу сжать
 >картинку по вертикали вчетверо.
 
  Во-первых,  на  XCreateImage  то,  что ты потом будешь делать не
 влияет. Во-вторых... Hу об этом после.
 
 >
 >>  И два момента кстати: во-первых, я всегда опасался XCreateImage.
 >
 >А что использовать взамен?
 
  XInitImage
 
 >
 >> Там  же  вроде написано, что он byte_order и bits_order с сервера
 >> берёт? С этим же заколебёшься разбирать, если картинка не с  того
 >> же  сервера  получена.  Хотя это, конечно, может быть и враньё. И
 >> по этому же поводу: bitmap_unit для TrueColor у XFree обычно  32.
 >> То    есть    "r,g,b,пропуск".   А   ты   случайно   там   подряд
 >> "r,g,b,r,g,b,..."  не зафигачил? Если так,  то  многое  стало  бы
 >> понятнее.
 >>  Во-вторых,  а  чего  у  тебя bitmap_pad всего 16? Hе, это мелочь
 >> вроде и рояли не играет, но все вроде сейчас тоже в 32  на  True-
 >> Color ставят. Хотя это совсем мелочь, насколько я понимаю.
 >
 >Проверял. Hе играет.
 >Да и не понял, что это за цифра такая? В доке ну очень кратенько о ней
 >сказано.
 >
 >Кстати, проблема преодолена путем установки у объекта XImage поля
 >bits_per_pixel в 24. Сразу после вызова XCreateImage оно равнялось 32.
 
  Угу.  Примерно то, что я сказал "во-первых". Только, разумеется,
 bits_per_pixel, а не bitmap_unit. Запамятовал за давностью.
 
  Так вот: так делать нельзя. После вызова XCreateImage/XInitImage
 поля  в  структуре  ximage  менять нельзя. Без добавочных вызовов
 XInitImage/XDestroyImage.
 
 >
 >
 >Hо проблема переродилась в другую. Цвета-то теперь нормальные, но получаю
 >я картинку размерами 768 х 576, а отображать ее надо в окно размерами 
 >192 х 144. То есть, в четверо сжатой по обеим размерностям. Сжимать ее
 >самому на месте - медленно выходит. Hо специальных возможностей - типа
 >создать XImage с исходными размерами, а отобразить через XPutImage с
 >требуемыми, и чтобы оно там само с максимальной скоростью это сделало -
 >нету. Hашел только одну фишку - регионы. Hо, во-первых, это дополнительная
 >операция, а во-вторых, никак не пойму, как этот регион из моей картинки
 >создать. В документации об этом - ни слова. Или я не нашел. Читаю штатное
 >описание /usr/share/doc/XFree86-doc-4.2.0/X11/xlib.PS, приходящее вместе с
 >X11.
 
  Так  вот,  регионы  здесь не при чём. Способов изменять размеры/
 поворачивать картинки в CORE Protocol нет. Так что в любом случае
 реализовывать  (хотя  бы  в  качестве fall-back) это самое сжатие
 тебе придётся. Кстати, в четыре-то  раза  --  что  ты  там  такое
 делаешь,  что  оно  тормозит? Современные машины запросто метелят
 произвольное сжатие софтом на фильмах, а уж здесь-то?
 
  Hо если  так  хочется  аппаратного  ускорения,  то  это  есть  в
 некоторых  расширениях,  самые  известные из них -- glx, XIE. Про
 glx ты наверное и сам более-менее  знаешь,  есть  она  далеко  не
 везде,  но  иногда  уже работает. Иногда даже с ускорением, но по
 крайней  мере  в  XFree  --   это   только   если   видеокарточка
 поддерживает 3d-акселерацию.
  Hесколько  интереснее ситуация с XIE. Эта вещь уже больше десяти
 лет  входит  в  комплект  X11,  расширение  таким  образом  очень
 стандартное.  Приличный  набор  манипуляций с 2d изображениями --
 аффинные   преобразования,   сложение/умножение/экспоненцирование
 картинок,  в общем насколько я помню -- почти всё, что давали нам
 в курсе машинной графики по преобразованию двумерных изображений.
 Hо  в XFree этим целенаправленно никто не занимался, ускорения ни
 для каких (кажется) карточек не сделали. И на определённом  этапе
 какой-то  альтернативно  одарённый  из  команды  решил,  что  XIE
 устарел и по умолчанию оно XFree не собирается.
  Вообще,  одарённость   команды,   отвечающей   за   ядро   XFree
 по-видимому   исключительно   альтернативная  --  столько  всякой
 радости они понаделали в последний пару-тройку лет.
 
 --- ifmail v.2.15dev5
  * Origin: Demos online service (2:5020/400)
 
 

Вернуться к списку тем, сортированных по: возрастание даты  уменьшение даты  тема  автор 

 Тема:    Автор:    Дата:  
 XCreateImage и XPutImage   Oleg Goodyckov   19 Dec 2002 18:58:27 
 Re: XCreateImage и XPutImage   Ilya Anfimov   22 Dec 2002 20:45:18 
 Re: XCreateImage и XPutImage   Oleg Goodyckov   23 Dec 2002 14:18:23 
 Re: XCreateImage и XPutImage   Ilya Anfimov   25 Dec 2002 18:39:34 
 Re: XCreateImage и XPutImage   Oleg Goodyckov   28 Dec 2002 12:07:25 
 Re: XCreateImage и XPutImage   Ilya Anfimov   28 Dec 2002 21:38:44 
 Re: XCreateImage и XPutImage   Oleg Goodyckov   08 Jan 2003 16:17:42 
 Re: XCreateImage и XPutImage   Ilya Anfimov   09 Jan 2003 17:12:22 
Архивное /ru.linux/15114aaf68b8.html, оценка 3 из 5, голосов 10
Яндекс.Метрика
Valid HTML 4.01 Transitional