Mono bitmap processing updates

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@15403 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
David Webster
2002-05-07 04:56:22 +00:00
parent 5941c5de92
commit 29172908bf
6 changed files with 30 additions and 177 deletions

View File

@@ -23,26 +23,6 @@ public:
virtual void SelectObject(const wxBitmap& rBitmap); virtual void SelectObject(const wxBitmap& rBitmap);
protected: protected:
// override some base class virtuals // override some base class virtuals
virtual void DoDrawRectangle( wxCoord vX
,wxCoord vY
,wxCoord vWidth
,wxCoord vHeight
);
virtual void DoDrawRoundedRectangle( wxCoord vX
,wxCoord vY
,wxCoord vWidth
,wxCoord vHeight
,double dRadius
);
virtual void DoDrawText( const wxString& rsText
,wxCoord vX
,wxCoord vY
);
virtual void DoDrawLine( wxCoord vX1
,wxCoord vY1
,wxCoord vX2
,wxCoord vY2
);
virtual void DoGetSize( int* pWidth virtual void DoGetSize( int* pWidth
,int* pHeight ,int* pHeight
) const; ) const;

View File

@@ -939,6 +939,7 @@ wxImage wxBitmap::ConvertToImage() const
,&vSizlPage ,&vSizlPage
,PU_PELS | GPIA_ASSOC ,PU_PELS | GPIA_ASSOC
); );
}
if ((hOldBitmap = ::GpiSetBitmap(hPSMem, hBitmap)) == HBM_ERROR) if ((hOldBitmap = ::GpiSetBitmap(hPSMem, hBitmap)) == HBM_ERROR)
{ {
ERRORID vError; ERRORID vError;
@@ -947,7 +948,6 @@ wxImage wxBitmap::ConvertToImage() const
vError = ::WinGetLastError(vHabmain); vError = ::WinGetLastError(vHabmain);
sError = wxPMErrorToStr(vError); sError = wxPMErrorToStr(vError);
} }
}
// //
// Copy data from the device-dependent bitmap to the DIB // Copy data from the device-dependent bitmap to the DIB

View File

@@ -1543,20 +1543,20 @@ void wxDC::DoDrawBitmap(
(cBmpGreen == cOldGreenFore) && (cBmpGreen == cOldGreenFore) &&
(cBmpBlue == cOldBlueFore)) (cBmpBlue == cOldBlueFore))
{ {
*pucData = cRedFore; *pucData = cBlueFore;
pucData++; pucData++;
*pucData = cGreenFore; *pucData = cGreenFore;
pucData++; pucData++;
*pucData = cBlueFore; *pucData = cRedFore;
pucData++; pucData++;
} }
else else
{ {
*pucData = cRedBack; *pucData = cBlueBack;
pucData++; pucData++;
*pucData = cGreenBack; *pucData = cGreenBack;
pucData++; pucData++;
*pucData = cBlueBack; *pucData = cRedBack;
pucData++; pucData++;
} }
} }
@@ -1879,6 +1879,7 @@ void wxDC::SetPen(
if (!m_hOldPen) if (!m_hOldPen)
m_hOldPen = m_pen.GetPS(); m_hOldPen = m_pen.GetPS();
} }
::GpiSetColor(m_hPS, m_pen.GetColour().GetPixel());
} }
} }

View File

@@ -24,12 +24,6 @@
IMPLEMENT_DYNAMIC_CLASS(wxMemoryDC, wxDC) IMPLEMENT_DYNAMIC_CLASS(wxMemoryDC, wxDC)
extern void wxLoadBitmapWithData( HPS hPS
,HBITMAP hBitmap
,int nWidth
,int nHeight
);
///////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////////
// Memory DC // Memory DC
///////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////////
@@ -157,20 +151,18 @@ void wxMemoryDC::SelectObject(
WXHBITMAP hBmp = rBitmap.GetHBITMAP(); WXHBITMAP hBmp = rBitmap.GetHBITMAP();
if (!hBmp) if (!hBmp)
{
m_hOldBitmap = (WXHBITMAP)::GpiSetBitmap(m_hPS, NULLHANDLE);
return; return;
}
m_vSelectedBitmap.SetSelectedInto(this); m_vSelectedBitmap.SetSelectedInto(this);
hBmp = (WXHBITMAP)::GpiSetBitmap(m_hPS, (HBITMAP)hBmp); m_hOldBitmap = (WXHBITMAP)::GpiSetBitmap(m_hPS, (HBITMAP)hBmp);
if (hBmp == HBM_ERROR) if (m_hOldBitmap == HBM_ERROR)
{ {
wxLogLastError(wxT("SelectObject(memDC, bitmap)")); wxLogLastError(wxT("SelectObject(memDC, bitmap)"));
wxFAIL_MSG(wxT("Couldn't select a bitmap into wxMemoryDC")); wxFAIL_MSG(wxT("Couldn't select a bitmap into wxMemoryDC"));
} }
else if (!m_hOldBitmap)
{
m_hOldBitmap = hBmp;
}
} // end of wxMemoryDC::SelectObject } // end of wxMemoryDC::SelectObject
void wxMemoryDC::DoGetSize( void wxMemoryDC::DoGetSize(
@@ -188,121 +180,3 @@ void wxMemoryDC::DoGetSize(
*pHeight = m_vSelectedBitmap.GetHeight(); *pHeight = m_vSelectedBitmap.GetHeight();
} // end of wxMemoryDC::DoGetSize } // end of wxMemoryDC::DoGetSize
void wxMemoryDC::DoDrawRectangle(
wxCoord vX
, wxCoord vY
, wxCoord vWidth
, wxCoord vHeight
)
{
wxDC::DoDrawRectangle(vX, vY, vWidth, vHeight);
wxLoadBitmapWithData( m_hPS
,(HBITMAP)m_vSelectedBitmap.GetHBITMAP()
,m_vSelectedBitmap.GetWidth()
,m_vSelectedBitmap.GetHeight()
);
} // end of wxMemoryDC::DoDrawRectangle
void wxMemoryDC::DoDrawRoundedRectangle(
wxCoord vX
, wxCoord vY
, wxCoord vWidth
, wxCoord vHeight
, double dRadius
)
{
wxDC::DoDrawRoundedRectangle(vX, vY, vWidth, vHeight, dRadius);
wxLoadBitmapWithData( m_hPS
,(HBITMAP)m_vSelectedBitmap.GetHBITMAP()
,m_vSelectedBitmap.GetWidth()
,m_vSelectedBitmap.GetHeight()
);
} // end of wxMemoryDC::DoDrawRoundedRectangle
void wxMemoryDC::DoDrawText(
const wxString& rsText
, wxCoord vX
, wxCoord vY
)
{
wxDC::DoDrawText(rsText, vX, vY);
wxLoadBitmapWithData( m_hPS
,(HBITMAP)m_vSelectedBitmap.GetHBITMAP()
,m_vSelectedBitmap.GetWidth()
,m_vSelectedBitmap.GetHeight()
);
} // end of wxMemoryDC::DoDrawRectangle
void wxMemoryDC::DoDrawLine(
wxCoord vX1
, wxCoord vY1
, wxCoord vX2
, wxCoord vY2
)
{
wxDC::DoDrawLine(vX1, vY1, vX2, vY2);
wxLoadBitmapWithData( m_hPS
,(HBITMAP)m_vSelectedBitmap.GetHBITMAP()
,m_vSelectedBitmap.GetWidth()
,m_vSelectedBitmap.GetHeight()
);
} // end of wxMemoryDC::DoDrawRoundedRectangle
void wxLoadBitmapWithData(
HPS hPS
, HBITMAP hBitmap
, int nWidth
, int nHeight
)
{
BITMAPINFOHEADER2 vHeader;
BITMAPINFO2 vInfo;
vHeader.cbFix = 16L;
if (::GpiQueryBitmapInfoHeader(hBitmap, &vHeader))
{
unsigned char* pucData = NULL;
unsigned char* pucBits;
int nBytesPerLine = nWidth * 3;
LONG lScans = 0L;
POINTL vPoint;
LONG lColor;
vInfo.cbFix = 16;
vInfo.cx = vHeader.cx;
vInfo.cy = vHeader.cy;
vInfo.cPlanes = vHeader.cPlanes;
vInfo.cBitCount = 24;
pucData = (unsigned char*)malloc(nBytesPerLine * nHeight);
pucBits = pucData;
for (int i = 0; i < nHeight; i++)
{
for (int j = 0; j < nWidth; j++)
{
vPoint.x = j; vPoint.y = i;
lColor = ::GpiQueryPel(hPS, &vPoint);
*(pucBits++) = (unsigned char)lColor;
*(pucBits++) = (unsigned char)(lColor >> 8);
*(pucBits++) = (unsigned char)(lColor >> 16);
}
}
if ((lScans = ::GpiSetBitmapBits( hPS
,0
,(LONG)nHeight
,(PBYTE)pucData
,&vInfo
)) == GPI_ALTERROR)
{
ERRORID vError;
wxString sError;
vError = ::WinGetLastError(vHabmain);
sError = wxPMErrorToStr(vError);
}
free(pucData);
}
}

View File

@@ -50,6 +50,7 @@ void wxIconRefData::Free()
// ---------------------------------------------------------------------------- // ----------------------------------------------------------------------------
wxIcon::wxIcon() wxIcon::wxIcon()
: m_bIsXpm(FALSE)
{ {
} }
@@ -58,6 +59,7 @@ wxIcon::wxIcon(
, int WXUNUSED(nWidth) , int WXUNUSED(nWidth)
, int WXUNUSED(nHeight) , int WXUNUSED(nHeight)
) )
: m_bIsXpm(FALSE)
{ {
} }
@@ -67,6 +69,7 @@ wxIcon::wxIcon(
, int nDesiredWidth , int nDesiredWidth
, int nDesiredHeight , int nDesiredHeight
) )
: m_bIsXpm(FALSE)
{ {
// //
// A very poor hack, but we have to have separate icon files from windows // A very poor hack, but we have to have separate icon files from windows
@@ -94,6 +97,11 @@ void wxIcon::CreateIconFromXpm(
wxBitmap vBmp(ppData); wxBitmap vBmp(ppData);
CopyFromBitmap(vBmp); CopyFromBitmap(vBmp);
if (GetHICON())
{
m_bIsXpm = TRUE;
m_vXpmSrc = vBmp;
}
} // end of wxIcon::CreateIconFromXpm } // end of wxIcon::CreateIconFromXpm
void wxIcon::CopyFromBitmap( void wxIcon::CopyFromBitmap(
@@ -129,7 +137,7 @@ void wxIcon::CopyFromBitmap(
POINTL vPoint[4] = { 0, 0, rBmp.GetWidth(), rBmp.GetHeight(), POINTL vPoint[4] = { 0, 0, rBmp.GetWidth(), rBmp.GetHeight(),
0, 0, rBmp.GetWidth(), rBmp.GetHeight() 0, 0, rBmp.GetWidth(), rBmp.GetHeight()
}; };
POINTL vPointMask[4] = { 0, 0, rBmp.GetWidth(), rBmp.GetHeight(), POINTL vPointMask[4] = { 0, 0, rBmp.GetWidth(), rBmp.GetHeight() * 2,
0, 0, rBmp.GetWidth(), rBmp.GetHeight() 0, 0, rBmp.GetWidth(), rBmp.GetHeight()
}; };
@@ -185,7 +193,7 @@ void wxIcon::CopyFromBitmap(
} }
vIconInfo.hbmColor = hBmp; vIconInfo.hbmColor = hBmp;
vHeader.cy = (ULONG)rBmp.GetHeight(); vHeader.cy = (ULONG)rBmp.GetHeight() * 2;
hBmpMask = ::GpiCreateBitmap( hPSDst hBmpMask = ::GpiCreateBitmap( hPSDst
,&vHeader ,&vHeader
,0L ,0L

View File

@@ -4,7 +4,7 @@ DATA MULTIPLE NONSHARED READWRITE LOADONCALL
CODE LOADONCALL CODE LOADONCALL
EXPORTS EXPORTS
;From library: H:\DEV\WX2\WXWINDOWS\LIB\wx.lib ;From library: F:\DEV\WX2\WXWINDOWS\LIB\wx.lib
;From object file: dummy.cpp ;From object file: dummy.cpp
;PUBDEFs (Symbols available from object file): ;PUBDEFs (Symbols available from object file):
wxDummyChar wxDummyChar
@@ -1925,7 +1925,7 @@ EXPORTS
wxEVT_NC_LEFT_DCLICK wxEVT_NC_LEFT_DCLICK
wxEVT_INIT_DIALOG wxEVT_INIT_DIALOG
wxEVT_COMMAND_SET_FOCUS wxEVT_COMMAND_SET_FOCUS
;From object file: H:\DEV\WX2\WXWINDOWS\src\common\extended.c ;From object file: F:\DEV\WX2\WXWINDOWS\src\common\extended.c
;PUBDEFs (Symbols available from object file): ;PUBDEFs (Symbols available from object file):
ConvertToIeeeExtended ConvertToIeeeExtended
ConvertFromIeeeExtended ConvertFromIeeeExtended
@@ -6068,7 +6068,7 @@ EXPORTS
Read32__17wxTextInputStreamFv Read32__17wxTextInputStreamFv
;wxTextInputStream::SkipIfEndOfLine(char) ;wxTextInputStream::SkipIfEndOfLine(char)
SkipIfEndOfLine__17wxTextInputStreamFc SkipIfEndOfLine__17wxTextInputStreamFc
;From object file: H:\DEV\WX2\WXWINDOWS\src\common\unzip.c ;From object file: F:\DEV\WX2\WXWINDOWS\src\common\unzip.c
;PUBDEFs (Symbols available from object file): ;PUBDEFs (Symbols available from object file):
unzReadCurrentFile unzReadCurrentFile
unzGetCurrentFileInfo unzGetCurrentFileInfo
@@ -12348,25 +12348,15 @@ EXPORTS
__ct__10wxWindowDCFP8wxWindow __ct__10wxWindowDCFP8wxWindow
;From object file: ..\os2\dcmemory.cpp ;From object file: ..\os2\dcmemory.cpp
;PUBDEFs (Symbols available from object file): ;PUBDEFs (Symbols available from object file):
;wxMemoryDC::DoDrawRoundedRectangle(int,int,int,int,double)
DoDrawRoundedRectangle__10wxMemoryDCFiN31d
;wxMemoryDC::DoDrawText(const wxString&,int,int)
DoDrawText__10wxMemoryDCFRC8wxStringiT2
;wxMemoryDC::SelectObject(const wxBitmap&) ;wxMemoryDC::SelectObject(const wxBitmap&)
SelectObject__10wxMemoryDCFRC8wxBitmap SelectObject__10wxMemoryDCFRC8wxBitmap
__vft10wxMemoryDC8wxObject __vft10wxMemoryDC8wxObject
;wxMemoryDC::DoDrawLine(int,int,int,int)
DoDrawLine__10wxMemoryDCFiN31
;wxMemoryDC::Init() ;wxMemoryDC::Init()
Init__10wxMemoryDCFv Init__10wxMemoryDCFv
;wxLoadBitmapWithData(unsigned long,unsigned long,int,int)
wxLoadBitmapWithData__FUlT1iT3
;wxMemoryDC::DoGetSize(int*,int*) const ;wxMemoryDC::DoGetSize(int*,int*) const
DoGetSize__10wxMemoryDCCFPiT1 DoGetSize__10wxMemoryDCCFPiT1
;wxMemoryDC::wxMemoryDC(wxDC*) ;wxMemoryDC::wxMemoryDC(wxDC*)
__ct__10wxMemoryDCFP4wxDC __ct__10wxMemoryDCFP4wxDC
;wxMemoryDC::DoDrawRectangle(int,int,int,int)
DoDrawRectangle__10wxMemoryDCFiN31
;wxMemoryDC::wxMemoryDC() ;wxMemoryDC::wxMemoryDC()
__ct__10wxMemoryDCFv __ct__10wxMemoryDCFv
;wxMemoryDC::sm_classwxMemoryDC ;wxMemoryDC::sm_classwxMemoryDC