forum.wfido.ru  

Вернуться   forum.wfido.ru > Прочие эхи > RU.LINUX

Ответ
 
Опции темы Опции просмотра
  #1  
Старый 30.04.2021, 21:49
Ilya Anfimov
Guest
 
Сообщений: n/a
По умолчанию Re: XCreateImage и XPutImage

Ilya Anfimov написал(а) к Oleg Goodyckov в Dec 02 19:45:18 по местному времени:

From: ilan@adt.ru (Ilya Anfimov)

On Thu, 19 Dec 2002 14:58:27 +0000 (UTC),
Oleg Goodyckov <og@videoproject.kiev.ua> wrote:
>Привет всем!
>
>Что-то не пойму, было это сообщение в эхе или нет? Вроже отправлял, но не
>видел.

Было.

>
>Проблема есть такая: читаю из файла в память картинку размерами
>768 х 576 х 24 (то есть на пиксель - 3 байта). Создаю процедурой
>XCreateImage имидж и процедурой XPutImage вывожу его в окно размерами
>192 х 144.
>
>По высоте получается все хорошо. Но по ширине картинка получается втрое
>шире. И происходит сие потому, что каждый байт строки исходного
>изображения отображается в отдельный пиксель целевой картинки. Так что она
>состоит из вертикальных полос красного, зеленого и синего цветов,
>промодулированных по яркости. То есть все, как положенно, но почему байт
>попадает в пиксель?
>Впечатление такое, что какая-то из сабжевых процедур воспринимает исходную
>картинку не как 24-разрядную, а как 8-разрядную. Но
>Screen->rootvisual->bits_perrgb я устанавливал в 24 и никакого
>результата оно не дало. То есть, отношения к делу не имееют.
>
>Кто подскажет, где чего крутить?

1) Первый вариант при таких приколах -- посмотреть на те
творения, где всё работает. Ну не знаю, например, на display от
ImageMagick какой-нибудь.
2) X11 в этом месте работает как описано в документации.
Следовательно, глюки у тебя. Следовательно, без примера кода это
обсуждение будет весьма отвлечённым. Кстати, и твоё рассуждение о
промодулированных полосах мне тоже кажется несколько
расплывчатым.
3) Кстати, в качестве отвлечённого обсуждения: ты случайно for-
mat как XYPixmap не поставил? А то привычное ещё с DOSовых времён
расположение -- это ZPixmap.

>Заранее благодарен.
--- ifmail v.2.15dev5
Ответить с цитированием
  #2  
Старый 30.04.2021, 21:50
Ilya Anfimov
Guest
 
Сообщений: n/a
По умолчанию Re: XCreateImage и XPutImage

Ilya Anfimov написал(а) к Oleg Goodyckov в Dec 02 20:38:44 по местному времени:

From: ilan@adt.ru (Ilya Anfimov)

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]

>> > src1win.c_image = XCreateImage (XtDisplay (src1win.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.width34); // 768/192=4 - новая
>>
>> Последней строчки совсем не понял. Откуда тут ещё "*4" взялось?
>
>Ну так строка ведь должна быть в четверо длиннее, если я хочу сжать
>картинку по вертикали вчетверо.

Во-первых, на XCreateImage то, что ты потом будешь делать не
влияет. Во-вторых... Ну об этом после.

>
>> И два момента кстати: во-первых, я всегда опасался XCreateImage.
>
>А что использовать взамен?

XInitImage

>
>> Там же вроде написано, что он byteorder и bitsorder с сервера
>> берёт? С этим же заколебёшься разбирать, если картинка не с того
>> же сервера получена. Хотя это, конечно, может быть и враньё. И
>> по этому же поводу: bitmap_unit для TrueColor у XFree обычно 32.
>> То есть "r,g,b,пропуск". А ты случайно там подряд
>> "r,g,b,r,g,b,..." не зафигачил? Если так, то многое стало бы
>> понятнее.
>> Во-вторых, а чего у тебя bitmap_pad всего 16? Не, это мелочь
>> вроде и рояли не играет, но все вроде сейчас тоже в 32 на True-
>> Color ставят. Хотя это совсем мелочь, насколько я понимаю.
>
>Проверял. Не играет.
>Да и не понял, что это за цифра такая? В доке ну очень кратенько о ней
>сказано.
>
>Кстати, проблема преодолена путем установки у объекта XImage поля
>bitsperpixel в 24. Сразу после вызова XCreateImage оно равнялось 32.

Угу. Примерно то, что я сказал "во-первых". Только, разумеется,
bitsper_pixel, а не bitmapunit. Запамятовал за давностью.

Так вот: так делать нельзя. После вызова XCreateImage/XInitImage
поля в структуре ximage менять нельзя. Без добавочных вызовов
XInitImage/XDestroyImage.

>
>
>Но проблема переродилась в другую. Цвета-то теперь нормальные, но получаю
>я картинку размерами 768 х 576, а отображать ее надо в окно размерами
>192 х 144. То есть, в четверо сжатой по обеим размерностям. Сжимать ее
>самому на месте - медленно выходит. Но специальных возможностей - типа
>создать XImage с исходными размерами, а отобразить через XPutImage с
>требуемыми, и чтобы оно там само с максимальной скоростью это сделало -
>нету. Нашел только одну фишку - регионы. Но, во-первых, это дополнительная
>операция, а во-вторых, никак не пойму, как этот регион из моей картинки
>создать. В документации об этом - ни слова. Или я не нашел. Читаю штатное
>описание /usr/share/doc/XFree86-doc-4.2.0/X11/xlib.PS, приходящее вместе с
>X11.

Так вот, регионы здесь не при чём. Способов изменять размеры/
поворачивать картинки в CORE Protocol нет. Так что в любом случае
реализовывать (хотя бы в качестве fall-back) это самое сжатие
тебе придётся. Кстати, в четыре-то раза -- что ты там такое
делаешь, что оно тормозит? Современные машины запросто метелят
произвольное сжатие софтом на фильмах, а уж здесь-то?

Но если так хочется аппаратного ускорения, то это есть в
некоторых расширениях, самые известные из них -- glx, XIE. Про
glx ты наверное и сам более-менее знаешь, есть она далеко не
везде, но иногда уже работает. Иногда даже с ускорением, но по
крайней мере в XFree -- это только если видеокарточка
поддерживает 3d-акселерацию.
Несколько интереснее ситуация с XIE. Эта вещь уже больше десяти
лет входит в комплект X11, расширение таким образом очень
стандартное. Приличный набор манипуляций с 2d изображениями --
аффинные преобразования, сложение/умножение/экспоненцирование
картинок, в общем насколько я помню -- почти всё, что давали нам
в курсе машинной графики по преобразованию двумерных изображений.
Но в XFree этим целенаправленно никто не занимался, ускорения ни
для каких (кажется) карточек не сделали. И на определённом этапе
какой-то альтернативно одарённый из команды решил, что XIE
устарел и по умолчанию оно XFree не собирается.
Вообще, одарённость команды, отвечающей за ядро XFree
по-видимому исключительно альтернативная -- столько всякой
радости они понаделали в последний пару-тройку лет.

--- ifmail v.2.15dev5
Ответить с цитированием
  #3  
Старый 30.04.2021, 21:57
Oleg Goodyckov
Guest
 
Сообщений: n/a
По умолчанию Re: XCreateImage и XPutImage

Oleg Goodyckov написал(а) к Ilya Anfimov в Dec 02 11:07:24 по местному времени:

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),
> >> >По высоте получается все хорошо. Но по ширине картинка получается втрое
> >> >шире. И происходит сие потому, что каждый байт строки исходного
> >> >изображения отображается в отдельный пиксель целевой картинки. Так что она
> >> >состоит из вертикальных полос красного, зеленого и синего цветов,
> >> >промодулированных по яркости. То есть все, как положенно, но почему байт
> >> >попадает в пиксель?
> >> >Впечатление такое, что какая-то из сабжевых процедур воспринимает исходную
> >> >картинку не как 24-разрядную, а как 8-разрядную. Но
> >> >Screen->rootvisual->bits_perrgb я устанавливал в 24 и никакого
> >> >результата оно не дало. То есть, отношения к делу не имееют.
>
> А зачем ты его устанавливал там? Оно вообще так не ставится.

Для пробы. Ну там чтобы подергать, посмотреть на реакцию. Изучить в общем.
Так что результат получился отрицательным. Или положительным: не влияет.

> Насколько я помню, в XFree оно меняется только при старте
> сервера. Возможно, что ещё в конфигах где-нибудь есть. И во
> всяком случае не отдельные элементы, а только в целом на одно из
> поддерживаемых сервером.
>
> > src1win.c_image = XCreateImage (XtDisplay (src1win.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.width34); // 768/192=4 - новая
>
> Последней строчки совсем не понял. Откуда тут ещё "*4" взялось?

Ну так строка ведь должна быть в четверо длиннее, если я хочу сжать
картинку по вертикали вчетверо.

> И два момента кстати: во-первых, я всегда опасался XCreateImage.

А что использовать взамен?

> Там же вроде написано, что он byteorder и bitsorder с сервера
> берёт? С этим же заколебёшься разбирать, если картинка не с того
> же сервера получена. Хотя это, конечно, может быть и враньё. И
> по этому же поводу: bitmap_unit для TrueColor у XFree обычно 32.
> То есть "r,g,b,пропуск". А ты случайно там подряд
> "r,g,b,r,g,b,..." не зафигачил? Если так, то многое стало бы
> понятнее.
> Во-вторых, а чего у тебя bitmap_pad всего 16? Не, это мелочь
> вроде и рояли не играет, но все вроде сейчас тоже в 32 на True-
> Color ставят. Хотя это совсем мелочь, насколько я понимаю.

Проверял. Не играет.
Да и не понял, что это за цифра такая? В доке ну очень кратенько о ней
сказано.

Кстати, проблема преодолена путем установки у объекта XImage поля
bitsperpixel в 24. Сразу после вызова XCreateImage оно равнялось 32.


Но проблема переродилась в другую. Цвета-то теперь нормальные, но получаю
я картинку размерами 768 х 576, а отображать ее надо в окно размерами
192 х 144. То есть, в четверо сжатой по обеим размерностям. Сжимать ее
самому на месте - медленно выходит. Но специальных возможностей - типа
создать XImage с исходными размерами, а отобразить через XPutImage с
требуемыми, и чтобы оно там само с максимальной скоростью это сделало -
нету. Нашел только одну фишку - регионы. Но, во-первых, это дополнительная
операция, а во-вторых, никак не пойму, как этот регион из моей картинки
создать. В документации об этом - ни слова. Или я не нашел. Читаю штатное
описание /usr/share/doc/XFree86-doc-4.2.0/X11/xlib.PS, приходящее вместе с
X11.
--- ifmail v.2.15dev5
Ответить с цитированием
Ответ


Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход


Текущее время: 10:31. Часовой пояс GMT +4.


Powered by vBulletin® Version 3.8.7
Copyright ©2000 - 2024, vBulletin Solutions, Inc. Перевод: zCarot