|
|
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) Вернуться к списку тем, сортированных по: возрастание даты уменьшение даты тема автор
Архивное /ru.linux/15114aaf68b8.html, оценка из 5, голосов 10
|