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:
@@ -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;
|
||||||
|
@@ -939,14 +939,14 @@ 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;
|
{
|
||||||
wxString sError;
|
ERRORID vError;
|
||||||
|
wxString sError;
|
||||||
|
|
||||||
vError = ::WinGetLastError(vHabmain);
|
vError = ::WinGetLastError(vHabmain);
|
||||||
sError = wxPMErrorToStr(vError);
|
sError = wxPMErrorToStr(vError);
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
//
|
//
|
||||||
|
@@ -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());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -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);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
@@ -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
|
||||||
|
@@ -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
|
||||||
|
Reference in New Issue
Block a user