Updates to OS/2 to catch up with lib changes and for image processing.

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@15265 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
David Webster
2002-04-26 12:58:11 +00:00
parent 54905eba2a
commit 1cee3f6006
10 changed files with 175 additions and 104 deletions

View File

@@ -548,7 +548,7 @@ bool wxBitmap::CreateFromImage (
SetWidth(nWidth);
SetHeight(nBmpHeight);
if (nDepth == -1)
nDepth = 16; // wxDisplayDepth();
nDepth = wxDisplayDepth();
SetDepth(nDepth);
#if wxUSE_PALETTE
@@ -817,6 +817,7 @@ bool wxBitmap::CreateFromImage (
wxImage wxBitmap::ConvertToImage() const
{
wxImage vImage;
wxDC* pDC;
wxCHECK_MSG( Ok(), wxNullImage, wxT("invalid bitmap") );
@@ -836,12 +837,13 @@ wxImage wxBitmap::ConvertToImage() const
long lScans;
BITMAPINFOHEADER2 vDIBh;
BITMAPINFO2 vDIBInfo;
HDC hDCMem;
PSZ pszData[4] = { "Display", NULL, NULL, NULL };
HPS hPSMem;
HPS hPS;
SIZEL vSizlPage = {0,0};
HBITMAP hBitmap;
HBITMAP hOldBitmap;
DEVOPENSTRUC vDop = {0L, "DISPLAY", NULL, 0L, 0L, 0L, 0L, 0L, 0L};
SIZEL vSizlPage = {0,0};
HDC hDCMem;
vImage.Create( nWidth
,nHeight
@@ -885,34 +887,54 @@ wxImage wxBitmap::ConvertToImage() const
return wxNullImage;
}
//
// May already be selected into a PS
//
if ((pDC = GetSelectedInto()) != NULL)
{
hPSMem = pDC->GetHPS();
}
else
{
hDCMem = ::DevOpenDC( vHabmain
,OD_MEMORY
,"*"
,5L
,(PDEVOPENDATA)&vDop
,NULLHANDLE
);
hPSMem = ::GpiCreatePS( vHabmain
,hDCMem
,&vSizlPage
,PU_PELS | GPIA_ASSOC
);
hBitmap = (HBITMAP)GetHBITMAP();
if ((hOldBitmap = ::GpiSetBitmap(hPSMem, hBitmap)) == HBM_ERROR)
{
ERRORID vError;
wxString sError;
vError = ::WinGetLastError(vHabmain);
sError = wxPMErrorToStr(vError);
}
}
//
// Copy data from the device-dependent bitmap to the DIB
//
hDCMem = ::DevOpenDC( vHabmain
,OD_MEMORY
,"*"
,4
,(PDEVOPENDATA)pszData
,NULLHANDLE
);
hPSMem = ::GpiCreatePS( vHabmain
,hDCMem
,&vSizlPage
,PU_PELS | GPIA_ASSOC | GPIT_MICRO
);
hBitmap = ::GpiCreateBitmap( hPSMem
,&vDIBh
,0L
,NULL
,NULL
);
::GpiSetBitmap(hPSMem, hBitmap);
lScans = ::GpiQueryBitmapBits( hPSMem
,0L
,(LONG)nHeight
,(PBYTE)lpBits
,&vDIBInfo
);
if ((lScans = ::GpiQueryBitmapBits( hPSMem
,0L
,(LONG)nHeight
,(PBYTE)lpBits
,&vDIBInfo
)) == GPI_ALTERROR)
{
ERRORID vError;
wxString sError;
vError = ::WinGetLastError(vHabmain);
sError = wxPMErrorToStr(vError);
}
//
// Copy DIB data into the wxImage object
@@ -933,7 +955,12 @@ wxImage wxBitmap::ConvertToImage() const
}
ptbits += nPadding;
}
::GpiSetBitmap(hPSMem, NULLHANDLE);
if ((pDC = GetSelectedInto()) == NULL)
{
::GpiSetBitmap(hPSMem, NULLHANDLE);
::GpiDestroyPS(hPSMem);
::DevCloseDC(hDCMem);
}
//
// Similarly, set data according to the possible mask bitmap
@@ -945,13 +972,13 @@ wxImage wxBitmap::ConvertToImage() const
//
// Memory DC/PS created, color set, data copied, and memory DC/PS deleted
//
HDC hMemDC = ::DevOpenDC( vHabmain
,OD_MEMORY
,"*"
,4
,(PDEVOPENDATA)pszData
,NULLHANDLE
);
HDC hMemDC = ::DevOpenDC( vHabmain
,OD_MEMORY
,"*"
,5L
,(PDEVOPENDATA)&vDop
,NULLHANDLE
);
HPS hMemPS = ::GpiCreatePS( vHabmain
,hMemDC
,&vSizlPage
@@ -1009,8 +1036,6 @@ wxImage wxBitmap::ConvertToImage() const
//
// Free allocated resources
//
::GpiDestroyPS(hPSMem);
::DevCloseDC(hDCMem);
free(lpBits);
return vImage;
} // end of wxBitmap::ConvertToImage