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

Это русская секция форума wxWidjets. В этой секции вы можете обсуждать любые вопросы, связанные с wxWidgets на вашем родном языке.
Post Reply
bastet_kat
Earned a small fee
Earned a small fee
Posts: 15
Joined: Sun Jun 29, 2008 8:27 pm
Contact:

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

Post by bastet_kat » Tue Aug 19, 2008 6:35 pm

При дальнейшем освоении wx возник вопрос...если я загружаю на wxPanel bmp изображение, а затем начинаю рисовать, то нельзя ли дальнейшие изображения сделать полупрозрачными? например у wxPen... вот код того что я сделала:
Если это можно сделать, то подскажите как...как сделать полупрозрачным весь экран я знаю...а вот как отдельные части даже не догадываюсь
Attachments
графика.txt
(424 Bytes) Downloaded 134 times

tan
Moderator
Moderator
Posts: 1471
Joined: Tue Nov 14, 2006 7:58 am
Location: Saint-Petersburg, Russia

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

Post by tan » Tue Aug 19, 2008 7:21 pm

Привет.
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) будет работать.
OS: Windows XP Pro
Compiler: MSVC++ 7.1
wxWidgets: 2.8.10

bastet_kat
Earned a small fee
Earned a small fee
Posts: 15
Joined: Sun Jun 29, 2008 8:27 pm
Contact:

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

Post by bastet_kat » Tue Aug 19, 2008 7:42 pm

спасибо за информацию, сейчас разбираю, но вот никак не могу понять а что именно за эту прозрачность отвечает? обычно она указывается в процентах от 0 до 100. 0 - прозрачная, 100-сплошной цвет....а тут я такого не вижу....

tan
Moderator
Moderator
Posts: 1471
Joined: Tue Nov 14, 2006 7:58 am
Location: Saint-Petersburg, Russia

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

Post by tan » Wed Aug 20, 2008 5:44 am

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).
Вроде отсюда очевидно :) - альфа канал.
OS: Windows XP Pro
Compiler: MSVC++ 7.1
wxWidgets: 2.8.10

bastet_kat
Earned a small fee
Earned a small fee
Posts: 15
Joined: Sun Jun 29, 2008 8:27 pm
Contact:

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

Post by bastet_kat » Wed Aug 20, 2008 4:29 pm

=) спасибо, теперь поняла где просмотрела. вот только он у меня ругается на wxGCDC...говорит не объявлена, хотя библиотеку подключила, и говорит что деструктора нет....

tan
Moderator
Moderator
Posts: 1471
Joined: Tue Nov 14, 2006 7:58 am
Location: Saint-Petersburg, Russia

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

Post by tan » Wed Aug 20, 2008 5:03 pm

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 библиотеку.
OS: Windows XP Pro
Compiler: MSVC++ 7.1
wxWidgets: 2.8.10

bastet_kat
Earned a small fee
Earned a small fee
Posts: 15
Joined: Sun Jun 29, 2008 8:27 pm
Contact:

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

Post by bastet_kat » Thu Aug 21, 2008 5:34 pm

я извиняюсь, но как в wxdev-c++ перекомпилировать библиотеку? я вроде изменила в h файле параметры, скомпилировала. при запуске программы уже ошибки не выдает, но и не выполняет условие, не заходит в #if wxUSE_GRAPHICS_CONTEXT . может я что не так делаю?

tan
Moderator
Moderator
Posts: 1471
Joined: Tue Nov 14, 2006 7:58 am
Location: Saint-Petersburg, Russia

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

Post by tan » Thu Aug 21, 2008 6:50 pm

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

Code: Select all

mingw32-make.exe -f makefile.gcc [опции всякие] 
Да, рекомендую заглянуть в файл config.gcc и установить опцию USE_GDIPLUS в 1.
OS: Windows XP Pro
Compiler: MSVC++ 7.1
wxWidgets: 2.8.10

bastet_kat
Earned a small fee
Earned a small fee
Posts: 15
Joined: Sun Jun 29, 2008 8:27 pm
Contact:

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

Post by bastet_kat » Tue Aug 26, 2008 5:01 pm

Да, рекомендую заглянуть в файл config.gcc и установить опцию USE_GDIPLUS в 1.


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

EzPresso
In need of some credit
In need of some credit
Posts: 8
Joined: Tue Aug 26, 2008 7:45 am
Contact:

Post by EzPresso » Tue Aug 26, 2008 5:48 pm

Если Вы используете MinGW, откомпилировать wxWidgets с GDI+ (пока) не получится. Вы можете сделать прозрачность и без GDI+. Смотрите пример в samples/images. Код в файле image.cpp, начинающийся после комментария "// Then, draw colourful alpha-blended stripes".
### EzPresso.ru - Daylighting Simulation Software Development ###
Ubuntu 9.04 / Windows XP Pro
GNUC / MinGW / wxWidgets 2.9.1

tan
Moderator
Moderator
Posts: 1471
Joined: Tue Nov 14, 2006 7:58 am
Location: Saint-Petersburg, Russia

Post by tan » Wed Aug 27, 2008 6:56 am

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 работает с графическим контекстом и полупрозрачность имеет место :)
Attachments
GDIPLUS.zip
(99.34 KiB) Downloaded 134 times
OS: Windows XP Pro
Compiler: MSVC++ 7.1
wxWidgets: 2.8.10

EzPresso
In need of some credit
In need of some credit
Posts: 8
Joined: Tue Aug 26, 2008 7:45 am
Contact:

Post by EzPresso » Wed Aug 27, 2008 1:43 pm

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

Post Reply