]> git.saurik.com Git - wxWidgets.git/commitdiff
More bitmap and imaging updates
authorDavid Webster <Dave.Webster@bhmi.com>
Fri, 26 Apr 2002 22:26:08 +0000 (22:26 +0000)
committerDavid Webster <Dave.Webster@bhmi.com>
Fri, 26 Apr 2002 22:26:08 +0000 (22:26 +0000)
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@15276 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775

src/os2/bitmap.cpp
src/os2/dcmemory.cpp

index 6ea8aa4752793b3888f62fbe460ded4fd8ea3d62..99264e0611821c1edb96e9432212be7a6718d11a 100644 (file)
@@ -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) );
index 435bbf1f3fd37b3d442f55a9e59e6b8e8e3873b7..9217a80518736ccdf94a3a97edef950881437bbb 100644 (file)
@@ -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