From: David Webster Date: Fri, 26 Apr 2002 22:26:08 +0000 (+0000) Subject: More bitmap and imaging updates X-Git-Url: https://git.saurik.com/wxWidgets.git/commitdiff_plain/b1b054dad6ca9a0407f4fc2c6c87763a7dfe3888 More bitmap and imaging updates git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@15276 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775 --- diff --git a/src/os2/bitmap.cpp b/src/os2/bitmap.cpp index 6ea8aa4752..99264e0611 100644 --- a/src/os2/bitmap.cpp +++ b/src/os2/bitmap.cpp @@ -600,7 +600,7 @@ bool wxBitmap::CreateFromImage ( HDC hDC = ::DevOpenDC(vHabmain, OD_MEMORY, "*", 5L, (PDEVOPENDATA)&vDop, NULLHANDLE); HPS hPS = ::GpiCreatePS(vHabmain, hDC, &vSize, PU_PELS | GPIA_ASSOC); LONG lScans; - HDC hDCScreen = ::WinOpenWindowDC(HWND_DESKTOP); + HDC hDCScreen = ::DevOpenDC(vHabmain, OD_MEMORY, "*", 5L, (PDEVOPENDATA)&vDop, NULLHANDLE); HPS hPSScreen; HBITMAP hBmp; HBITMAP hBmpOld; @@ -661,6 +661,7 @@ bool wxBitmap::CreateFromImage ( // Have to do something similar to WIN32's StretchDIBits, use GpiBitBlt // in combination with setting the bits into the selected bitmap // + vInfo.cBitCount = 16; if ((lScans = ::GpiSetBitmapBits( hPS ,0 // Start at the bottom ,(LONG)nHeight // One line per scan @@ -675,6 +676,25 @@ bool wxBitmap::CreateFromImage ( sError = wxPMErrorToStr(vError); } + // + // for debugging---- + // +LONG alFormats[24]; +::GpiQueryDeviceBitmapFormats(hPS, 24, alFormats); +if ((lScans = ::GpiQueryBitmapBits( hPS + ,0L + ,(LONG)nHeight + ,(PBYTE)pucBits + ,&vInfo + )) == GPI_ALTERROR) +{ + ERRORID vError; + wxString sError; + + vError = ::WinGetLastError(vHabmain); + sError = wxPMErrorToStr(vError); +} + hPSScreen = ::GpiCreatePS( vHabmain ,hDCScreen ,&vSize @@ -708,11 +728,11 @@ bool wxBitmap::CreateFromImage ( // if (rImage.HasMask()) { - vHeader.cbFix = sizeof(BITMAPINFOHEADER2); + vHeader.cbFix = 16; vHeader.cx = nWidth; vHeader.cy = nHeight; vHeader.cPlanes = 1; - vHeader.cBitCount = 1; + vHeader.cBitCount = 24; hBmp = ::GpiCreateBitmap( hPS ,&vHeader ,0L @@ -725,7 +745,6 @@ bool wxBitmap::CreateFromImage ( else nHeight = nSizeLimit / nBytePerLine; vHeader.cy = (DWORD)(nHeight); - vHeader.cbImage = nBytePerLine * nHeight; nOrigin = 0; unsigned char cRed = rImage.GetMaskRed(); @@ -745,7 +764,6 @@ bool wxBitmap::CreateFromImage ( // nHeight = nHRemain; vHeader.cy = (DWORD)(nHeight); - vHeader.cbImage = nBytePerLine * nHeight; } ptbits = pucBits; for (int j = 0; j < nHeight; j++) @@ -801,7 +819,7 @@ bool wxBitmap::CreateFromImage ( pMask->SetMaskBitmap((WXHBITMAP)hBmp); SetMask(pMask); - hBmpOld = ::GpiSetBitmap(hPS, hBmp); + hBmpOld = ::GpiSetBitmap(hPS, hBmpOld); } // @@ -982,7 +1000,7 @@ wxImage wxBitmap::ConvertToImage() const HPS hMemPS = ::GpiCreatePS( vHabmain ,hMemDC ,&vSizlPage - ,PU_PELS | GPIA_ASSOC | GPIT_MICRO + ,PU_PELS | GPIA_ASSOC ); ::GpiSetColor(hMemPS, OS2RGB(0, 0, 0)); ::GpiSetBackColor(hMemPS, OS2RGB(255, 255, 255) ); diff --git a/src/os2/dcmemory.cpp b/src/os2/dcmemory.cpp index 435bbf1f3f..9217a80518 100644 --- a/src/os2/dcmemory.cpp +++ b/src/os2/dcmemory.cpp @@ -204,7 +204,7 @@ void wxMemoryDC::DoDrawRectangle( { unsigned char* pucData = NULL; unsigned char* pucBits; - int nBytesPerLine = vWidth * 3; + int nBytesPerLine = m_vSelectedBitmap.GetWidth() * 3; LONG lScans = 0L; POINTL vPoint; LONG lColor; @@ -231,14 +231,13 @@ void wxMemoryDC::DoDrawRectangle( pucBits = pucData; for (int i = 0; i < m_vSelectedBitmap.GetHeight(); i++) { - for (int j = vX; j < m_vSelectedBitmap.GetWidth(); j++) + for (int j = 0; j < m_vSelectedBitmap.GetWidth(); j++) { if (i >= vY && j >= vX && i < vHeight && j < vWidth) { - vPoint.x = j; vPoint.y = i; if (i == vY || j == vX || i == m_vSelectedBitmap.GetWidth() -1 || - j == m_vSelectedBitmap.GetHeight() + j == m_vSelectedBitmap.GetHeight() - 1 ) lColor = m_pen.GetColour().GetPixel(); else