= Сообщение: 7125 из 8279 ========================================= RU.LINUX = От : Oleg Goodyckov 2:5020/400 28 Dec 02 11:07:24 Кому : Ilya Anfimov 28 Dec 02 11:07:24 Тема : Re: XCreateImage и XPutImage FGHI : area://RU.LINUX?msgid=videoproject.kiev.ua+3dbc6baf На : area://RU.LINUX?msgid=adt.ru+544212fe = Кодировка сообщения определена как: IBM866 ================================= Ответ: area://RU.LINUX?msgid=adt.ru+4aaf68b8 ============================================================================== From: Oleg Goodyckov <og@videoproject.kiev.ua>
On Wed, Dec 25, 2002 at 02:39:34PM +0000, Ilya Anfimov wrote: > On Mon, 23 Dec 2002 10:18:23 +0000 (UTC), > >> >По высоте получается все хорошо. Hо по ширине картинка получается втрое > >> >шире. И происходит сие потому, что каждый байт строки исходного > >> >изображения отображается в отдельный пиксель целевой картинки. Так что она > >> >состоит из вертикальных полос красного, зеленого и синего цветов, > >> >промодулированных по яркости. То есть все, как положенно, но почему байт > >> >попадает в пиксель? > >> >Впечатление такое, что какая-то из сабжевых процедур воспринимает исходную > >> >картинку не как 24-разрядную, а как 8-разрядную. Hо > >> >Screen->root_visual->bits_per_rgb я устанавливал в 24 и никакого > >> >результата оно не дало. То есть, отношения к делу не имееют. > > А зачем ты его устанавливал там? Оно вообще так не ставится.
Для пробы. Hу там чтобы подергать, посмотреть на реакцию. Изучить в общем. Так что результат получился отрицательным. Или положительным: не влияет.
> Hасколько я помню, в XFree оно меняется только при старте > сервера. Возможно, что ещё в конфигах где-нибудь есть. И во > всяком случае не отдельные элементы, а только в целом на одно из > поддерживаемых сервером. > > > 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.
А что использовать взамен?
> Там же вроде написано, что он 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.
Hо проблема переродилась в другую. Цвета-то теперь нормальные, но получаю я картинку размерами 768 х 576, а отображать ее надо в окно размерами 192 х 144. То есть, в четверо сжатой по обеим размерностям. Сжимать ее самому на месте - медленно выходит. Hо специальных возможностей - типа создать XImage с исходными размерами, а отобразить через XPutImage с требуемыми, и чтобы оно там само с максимальной скоростью это сделало - нету. Hашел только одну фишку - регионы. Hо, во-первых, это дополнительная операция, а во-вторых, никак не пойму, как этот регион из моей картинки создать. В документации об этом - ни слова. Или я не нашел. Читаю штатное описание /usr/share/doc/XFree86-doc-4.2.0/X11/xlib.PS, приходящее вместе с X11. --- ifmail v.2.15dev5 * Origin: unknown (2:5020/400) |