Page 1 of 1

Можно ли рисунок сделать полупро

Posted: Tue Aug 19, 2008 6:35 pm
by bastet_kat
При дальнейшем освоении wx возник вопрос...если я загружаю на wxPanel bmp изображение, а затем начинаю рисовать, то нельзя ли дальнейшие изображения сделать полупрозрачными? например у wxPen... вот код того что я сделала:
Если это можно сделать, то подскажите как...как сделать полупрозрачным весь экран я знаю...а вот как отдельные части даже не догадываюсь

Re: Можно ли рисунок сделать полуп

Posted: Tue Aug 19, 2008 7:21 pm
by tan
Привет.
bastet_kat wrote:При дальнейшем освоении wx возник вопрос...если я загружаю на wxPanel bmp изображение, а затем начинаю рисовать, то нельзя ли дальнейшие изображения сделать полупрозрачными? например у wxPen...
Насколько я знаю, прозрачность таких GDI объектов как wxPen, wxBrush поддерживается только для wxGraphicsContext и, соответственно wxGCDC
http://docs.wxwidgets.org/stable/wx_wxg ... icscontext
Ну, примерно так:

Code: Select all


#if wxUSE_GRAPHICS_CONTEXT
#include <wx/graphics.h>
#endif

...

void
wxLinearMeter::OnPaint(wxPaintEvent &event)
{
    wxPaintDC pdc(this);
#if wxUSE_GRAPHICS_CONTEXT
    if( m_style&wxLM_USEGDIPLUS )
    {
        wxGCDC gdc(pdc) ;
        CalcBarRect(&gdc, GetClientSize());
        DoDrawing(&gdc);
    }
    else
    {
#endif
        CalcBarRect(&pdc, GetClientSize());
        DoDrawing(&pdc);
#if wxUSE_GRAPHICS_CONTEXT
    }
#endif
}
Т.е., если использовать wxGCDC, то альфа канал для wxColour (который может использоваться для wxPen, wxBrush) будет работать.

Re: Можно ли рисунок сделать полуп

Posted: Tue Aug 19, 2008 7:42 pm
by bastet_kat
спасибо за информацию, сейчас разбираю, но вот никак не могу понять а что именно за эту прозрачность отвечает? обычно она указывается в процентах от 0 до 100. 0 - прозрачная, 100-сплошной цвет....а тут я такого не вижу....

Re: Можно ли рисунок сделать полуп

Posted: Wed Aug 20, 2008 5:44 am
by tan
bastet_kat wrote:спасибо за информацию, сейчас разбираю, но вот никак не могу понять а что именно за эту прозрачность отвечает? обычно она указывается в процентах от 0 до 100. 0 - прозрачная, 100-сплошной цвет....а тут я такого не вижу....
Ну как же :)
Вот конструктор wxColour:

Code: Select all

wxColour(unsigned char red, unsigned char green, unsigned char blue, unsigned char alpha=wxALPHA_OPAQUE)
...
alpha

The alpha value. Alpha values range from 0 (wxALPHA_TRANSPARENT) to 255 (wxALPHA_OPAQUE).
Вроде отсюда очевидно :) - альфа канал.

Re: Можно ли рисунок сделать полуп

Posted: Wed Aug 20, 2008 4:29 pm
by bastet_kat
=) спасибо, теперь поняла где просмотрела. вот только он у меня ругается на wxGCDC...говорит не объявлена, хотя библиотеку подключила, и говорит что деструктора нет....

Re: Можно ли рисунок сделать полуп

Posted: Wed Aug 20, 2008 5:03 pm
by tan
bastet_kat wrote:=) спасибо, теперь поняла где просмотрела. вот только он у меня ругается на wxGCDC...говорит не объявлена, хотя библиотеку подключила, и говорит что деструктора нет....
Если вы под виндой, тогда следует глянуть в файл WXROOT/include/wx/msw/setup.h и посмотреть установлено ли wxUSE_GRAPHICS_CONTEXT в 1 (и обратите внимание на комметарий):

Code: Select all

// Enable the new wxGraphicsPath and wxGraphicsContext classes for an advanced
// 2D drawing API.  (Still somewhat experimental)
//
// Please note that on Windows you will need to link with gdiplus.lib (use
// USE_GDIPLUS=1 for makefile builds) and distribute gdiplus.dll with your
// application if you want it to be runnable on pre-XP systems.
//
// Default is 0
//
// Recommended setting: 1
#ifndef wxUSE_GRAPHICS_CONTEXT
#define wxUSE_GRAPHICS_CONTEXT 0
#endif
Скорее всего у вас это 0. Тогда установите в 1 и пересоберите WX библиотеку.

Re: Можно ли рисунок сделать полуп

Posted: Thu Aug 21, 2008 5:34 pm
by bastet_kat
я извиняюсь, но как в wxdev-c++ перекомпилировать библиотеку? я вроде изменила в h файле параметры, скомпилировала. при запуске программы уже ошибки не выдает, но и не выполняет условие, не заходит в #if wxUSE_GRAPHICS_CONTEXT . может я что не так делаю?

Re: Можно ли рисунок сделать полуп

Posted: Thu Aug 21, 2008 6:50 pm
by tan
bastet_kat wrote:я извиняюсь, но как в wxdev-c++ перекомпилировать библиотеку?
Ну тут я ничем помочь не могу :( никогда не юзал эту штуку.
Работаю исключительно с командной строки :) Если у вас MinGW попробуйте просто зайти в диру WXROOT\build\msw и выполнить команду

Code: Select all

mingw32-make.exe -f makefile.gcc [опции всякие] 
Да, рекомендую заглянуть в файл config.gcc и установить опцию USE_GDIPLUS в 1.

Re: Можно ли рисунок сделать полуп

Posted: Tue Aug 26, 2008 5:01 pm
by bastet_kat
Да, рекомендую заглянуть в файл config.gcc и установить опцию USE_GDIPLUS в 1.


к сожалению не нашла этот файл....и прозрачности так и нет, хотя библиотеку вроде перекомпилировала....

Posted: Tue Aug 26, 2008 5:48 pm
by EzPresso
Если Вы используете MinGW, откомпилировать wxWidgets с GDI+ (пока) не получится. Вы можете сделать прозрачность и без GDI+. Смотрите пример в samples/images. Код в файле image.cpp, начинающийся после комментария "// Then, draw colourful alpha-blended stripes".

Posted: Wed Aug 27, 2008 6:56 am
by tan
EzPresso wrote:Если Вы используете MinGW, откомпилировать wxWidgets с GDI+ (пока) не получится.
Ну не совсем так все плохо :)
В аттаче я выложил архив инклюдов и библиотеку для MinGW (просто сделанную из gdiplus.dll), их надо кинуть в соответствующие диры MinGW. Инклюды взяты из студии 7.1 и слегка (действительно совсем слегка) подкручены. Ну и пересобрать WX с включенным wxUSE_CRAPHICS_CONTEXT. Да, единственное, что пришлось сделать - заменить в файле WXROOT/SRC/msw/graphics.cpp abs(sweepAngle) на fabs(sweepAngle) (строка 709). И это все, сампл drawing работает с графическим контекстом и полупрозрачность имеет место :)

Posted: Wed Aug 27, 2008 1:43 pm
by EzPresso
Вот спасибо! С Вашими заголовками действительно компилируется. А то в сети ходят 3 архива инклюдов GDI+, где LockBits вызывается с референсом, а не указателем в кач. первого аргумента!
Респект!!! :D