Gdiplus:: DrawCachedBitmap

Тема в разделе "WASM.WIN32", создана пользователем sometime, 28 июн 2009.

  1. sometime

    sometime Odessa

    Публикаций:
    0
    Регистрация:
    22 апр 2009
    Сообщения:
    227
    Адрес:
    sunday
    Много разных способов искал как вывести без мерцания(с помощью двойной буф) картинку в окно. BitBlt - хароший штука,но требует HBITMAP, при получении которого с Bitmap* или Image* (.GetHBITMAP) теряется прозрачность в моем битмапе(*.png). Прочитано не мало,вариантов опробовано не мало и вот он - выход DrawCachedBitmap,но и тут нашлись НО.
    Для того чтобы создать CachedBitmap нужен объект Graphics при создании которого нужно указать девайс(HDC). Получается так:
    Код (Text):
    1. Gdiplus::Bitmap*      BgBmp;
    2. Gdiplus::Graphics*  gr;
    3. CachedBitmap*      cb;
    4.  
    5. void create(HWND hWnd)
    6. {
    7. hdc = GetDC( hWnd );
    8. BgBmp = LoadImageFromResource( IDB_PNG_BG, _T("PNG"), GetModuleHandle(NULL), &BgImg );
    9. gr = new Gdiplus::Graphics(hdc);
    10. cb = new CachedBitmap( BgBmp, gr );
    11. gr->DrawCachedBitmap( cb, 0, 0 );
    12. ReleaseDC( hWnd, hdc );
    13. return;
    14. }
    15.  
    16. void paint(HWND hWnd)
    17. {
    18.  
    19.     hdc = GetDC( hWnd );
    20.     //hdc = BeginPaint( hWnd, &pss );  
    21.     gr->DrawCachedBitmap( cb, 0, 0 );
    22.     //gr.DrawImage(BgImg, 0, 0, 500, 500);
    23.     //BitBlt( hdc, 0, 0, W_MAIN_WND, H_MAIN_WND, hMemDC, 0, 0, SRCCOPY );
    24.     ReleaseDC( hWnd, hdc );
    25.     //EndPaint( hWnd, &pss );
    26.     return;
    27. }
    но получается так что в ф-ии create(...) винда возвращает один HDC а в paint(...) другой(
    Вообщем на это я не жалуюсь,но пока не понимаю почему(да и читать пока не охота по этому поводу)). Убивает то что не могу понять как мне создать один раз CachedBitmap при создании окна,например... и потом только выводить его постоянно DrawCachedBitmap в паинте...А то если создавать кешированую картинку прям в паинте - ну панятно - безсмысленно) правда и так пробовал))))

    !прошу помощи!спс!
     
  2. sometime

    sometime Odessa

    Публикаций:
    0
    Регистрация:
    22 апр 2009
    Сообщения:
    227
    Адрес:
    sunday
    не вестись на прозрачность в GDIplus(ИМХО!),все чему я научился спустя неделю чтений и тестов.)
    Ужасно тормозит комп! Принято решение - самому вырезать програмно и двойной буферизацией с помощью BitBlt копировать на "дисплей". А те мелочи типа подсветки кнопок и т.п. - мона уже с помощью DrawImage - не особо они большого размера и должно незаметно прорисоватся)