Russian Qt Forum
Сентябрь 21, 2024, 14:39 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Pixmap & QPixmap Qt 3.3.x  (Прочитано 3282 раз)
Steven_Orko
Гость
« : Март 19, 2009, 14:10 »

Подскажите, кто знает, как правильно получить изображение по идентификатору xorg Pixmap и сохранить его в QPixmap???

Я это делаю следующим образом:
Код:
QPixmap windowIcon;
windowIcon.detach();

Pixmap wndIcon = None;     //Иконка
Pixmap wndIconMask = None; //Маска иконки
//Получаем содержание свойства
XWMHints* pWMHints = XGetWMHints(_g_pAtoms->_pDsp, _windowId);
if (0 != pWMHints)
{//Если данные получены, то
if (pWMHints->flags & IconPixmapHint > 0) wndIcon = pWMHints->icon_pixmap;
if (pWMHints->flags & IconMaskHint > 0) wndIconMask = pWMHints->icon_mask;
XFree(pWMHints);
} //if (0 != pWMHints)

if (wndIcon != None)
{//Если если картинка, то
Window wndRoot = _g_pAtoms->_rootWindow;
int iX, iY;
unsigned int iWidth = 0;
unsigned int iHeight = 0;
unsigned int iBorderWidth;
unsigned int iDepth;
//Получаем геометрию объекта
XGetGeometry(_g_pAtoms->_pDsp, wndIcon, &wndRoot, &iX, &iY, &iWidth, &iHeight, &iBorderWidth, &iDepth);

if (iWidth > 0 && iHeight > 0)
{//Если рисунок не пуст, то
QPixmap wndPixmap(iWidth, iHeight, iDepth);
wndPixmap.detach();
GC tGC = qt_xget_temp_gc(_g_pAtoms->_iScreen, iDepth == 1);
XCopyArea(_g_pAtoms->_pDsp, wndIcon, wndPixmap.handle(), tGC, 0, 0, iWidth, iHeight, 0, 0);

if (wndIconMask != None)
{//Если у рисунка есть маска, то
QBitmap wndPixmapMask(iWidth, iHeight);
XCopyArea(_g_pAtoms->_pDsp, wndIconMask, wndPixmapMask.handle(),
qt_xget_temp_gc(_g_pAtoms->_iScreen, true), 0, 0, iWidth, iHeight, 0, 0);
wndPixmap.setMask(wndPixmapMask);
} //if (wndIconMask)
windowIcon = wndPixmap;
} //if (iWidth > 0 && iHeight > 0)
} //if (wndIcon != None)

Насколько это корректный способ?

Просто иногда в консоли появляются сообщения такого вида:
Код:
X Error: BadMatch (invalid parameter attributes) 8
  Major opcode:  62
  Minor opcode:  0
  Resource id:  0x260006b
« Последнее редактирование: Март 19, 2009, 14:15 от Steven_Orko » Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.125 секунд. Запросов: 21.