More bitmap and imaging updates

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@15276 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
David Webster
2002-04-26 22:26:08 +00:00
parent 3dc0174140
commit b1b054dad6
2 changed files with 28 additions and 11 deletions

View 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
@@ -671,6 +672,25 @@ bool wxBitmap::CreateFromImage (
ERRORID vError;
wxString sError;
vError = ::WinGetLastError(vHabmain);
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);
}
@@ -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) );

View 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