Битмапка с компрессией BI_PNG

Тема в разделе "WASM.WIN32", создана пользователем _DEN_, 11 ноя 2009.

  1. _DEN_

    _DEN_ DEN

    Публикаций:
    0
    Регистрация:
    8 окт 2003
    Сообщения:
    5.383
    Адрес:
    Йобастан
    Предельно простой код:

    Код (Text):
    1.     case WM_PAINT:
    2.         {
    3.             PAINTSTRUCT ps = {0};
    4.             HDC dc = BeginPaint(wnd, &ps);
    5.  
    6.             HBITMAP bmp = CreateCompatibleBitmap(dc, 308, 114);
    7.             HDC memdc = CreateCompatibleDC(dc);
    8.             SelectObject(memdc, bmp);
    9.             DeleteObject(bmp);
    10.  
    11.             BITMAPINFO bi = {0};
    12.             bi.bmiHeader.biSize = sizeof(bi.bmiHeader);
    13.             bi.bmiHeader.biWidth = 308;
    14.             bi.bmiHeader.biHeight = 114;
    15.             bi.bmiHeader.biPlanes = 1;
    16.             bi.bmiHeader.biCompression = BI_PNG;
    17.             bi.bmiHeader.biSizeImage = bitmap.size();
    18.             SetDIBitsToDevice(memdc, 0, 0, 308, 114, 0, 0, 0, 114, &*bitmap.begin(), &bi, DIB_RGB_COLORS);
    19.  
    20.             BLENDFUNCTION bf = {0};
    21.             bf.BlendOp = AC_SRC_OVER;
    22.             bf.SourceConstantAlpha = 255;
    23.             bf.AlphaFormat = AC_SRC_ALPHA;
    24.             AlphaBlend(dc, 0, 0, 308, 114, memdc, 0, 0, 308, 114, bf);
    25.             DeleteDC(memdc);
    26.  
    27.             EndPaint(wnd, &ps);
    28.         }
    29.         return 0;
    Когда использую BI_RGB - все ок, все работает. Когда даю PNG - отрисовка как будто не происходит :dntknw:
     
  2. _DEN_

    _DEN_ DEN

    Публикаций:
    0
    Регистрация:
    8 окт 2003
    Сообщения:
    5.383
    Адрес:
    Йобастан
    Эм... А, ну да :) Вопрос собственно в том, выводил ли кто PNG таким (или похожим) способом? Саму PNG-ху я создавал тремя способами в фотошопе и одним в mspaint. Результат один и тот же.
     
  3. iZzz32

    iZzz32 Sergey Sfeli

    Публикаций:
    0
    Регистрация:
    3 сен 2006
    Сообщения:
    355
    Я, конечно, могу сильно ошибаться… BI_PNG умеет выводиться на экран или только на принтер, который это поддерживает? :derisive:
     
  4. iZzz32

    iZzz32 Sergey Sfeli

    Публикаций:
    0
    Регистрация:
    3 сен 2006
    Сообщения:
    355
     
  5. _DEN_

    _DEN_ DEN

    Публикаций:
    0
    Регистрация:
    8 окт 2003
    Сообщения:
    5.383
    Адрес:
    Йобастан
    iZzz32

    Ясно, спасибо. Тогда не понятно - как загрузить кантинку с альфой? Вот что в мсдн сказано по поводу 32-х бит BI_RGB:
     
  6. MikDay

    MikDay New Member

    Публикаций:
    0
    Регистрация:
    5 май 2005
    Сообщения:
    32
    Адрес:
    Minsk
    _DEN_
    Посмотри эту статью:
    http://www.rsdn.ru/article/gdi/trsimple.xml