请问一个GDI+打印时Graphics创建失败的有关问题
请教一个GDI+打印时Graphics创建失败的问题
首先,打印非填充图形和有填充但是没有透明度的图形时都没有问题。虽然代码不一样,但是至少可以说明打印机DC本身是没有问题的。而在打印有透明度的图形的时候使用如下代码段,结果就是什么也没有打印出来。我自己DEBUG的结论是Graphics graphics(hDrawDC)失败造成的,但是不知道原因。请大家说下怎么解决这个问题。只要能打印出来就好。初次弄打印的问题,请赐教,谢谢。
UINT m_uTransparent(透明度), m_uColorRed, m_uColorGreen, m_uColorBlue,
m_uColorRedP, m_uColorGreenP, m_uColorBlueP;
*pa = (Point *)malloc(sizeof(Point)*gWinPntNum);(多边形节点数组)
for(int i=0; i<gWinPntNum; i++){
pa[i].X = gWinPntBuf[i].x;
pa[i].Y = gWinPntBuf[i].y;
}
COLORREF cfill = gPalette.GetColor(pEnt->iColor);
m_uTransparent = m_iTS_Level;
Graphics graphics(hDrawDC);(DEBUG发现Last Result= out of memory, NATIVE Graphics = NULL)
m_uColorRed = cfill % 256;
m_uColorGreen = (cfill >> 8) % 256;
m_uColorBlue = cfill >> 16;
m_uColorRedP = cfill % 256;
m_uColorGreenP = (cfill >> 8) % 256;
m_uColorBlueP = cfill >> 16;
SolidBrush blackBrush(Color(m_uTransparent, m_uColorRed, m_uColorGreen, m_uColorBlue));
graphics.SetSmoothingMode(SmoothingModeHighSpeed);
Status out = graphics.FillPolygon(&blackBrush, pa, gWinPntNum);(绘制内部,返回值是无效参数,不是OK,应该是由于graphics本身失败造成的)
if(m_iShowPolygonOutline){
Pen blackPen(Color(255, m_uColorRedP, m_uColorGreenP, m_uColorBlueP), 1);
graphics.DrawPolygon(&blackPen, pa, gWinPntNum);}(绘制外框)
------解决方案--------------------
我们这边也遇到直接使用gdi+绘图出现失败的情况,不知道是不是gdi+库版本问题还是什么问题?
建议使用VS自带的CImage类来绘图吧,功能不是一般的强大,稳定性应该很好的!
首先,打印非填充图形和有填充但是没有透明度的图形时都没有问题。虽然代码不一样,但是至少可以说明打印机DC本身是没有问题的。而在打印有透明度的图形的时候使用如下代码段,结果就是什么也没有打印出来。我自己DEBUG的结论是Graphics graphics(hDrawDC)失败造成的,但是不知道原因。请大家说下怎么解决这个问题。只要能打印出来就好。初次弄打印的问题,请赐教,谢谢。
UINT m_uTransparent(透明度), m_uColorRed, m_uColorGreen, m_uColorBlue,
m_uColorRedP, m_uColorGreenP, m_uColorBlueP;
*pa = (Point *)malloc(sizeof(Point)*gWinPntNum);(多边形节点数组)
for(int i=0; i<gWinPntNum; i++){
pa[i].X = gWinPntBuf[i].x;
pa[i].Y = gWinPntBuf[i].y;
}
COLORREF cfill = gPalette.GetColor(pEnt->iColor);
m_uTransparent = m_iTS_Level;
Graphics graphics(hDrawDC);(DEBUG发现Last Result= out of memory, NATIVE Graphics = NULL)
m_uColorRed = cfill % 256;
m_uColorGreen = (cfill >> 8) % 256;
m_uColorBlue = cfill >> 16;
m_uColorRedP = cfill % 256;
m_uColorGreenP = (cfill >> 8) % 256;
m_uColorBlueP = cfill >> 16;
SolidBrush blackBrush(Color(m_uTransparent, m_uColorRed, m_uColorGreen, m_uColorBlue));
graphics.SetSmoothingMode(SmoothingModeHighSpeed);
Status out = graphics.FillPolygon(&blackBrush, pa, gWinPntNum);(绘制内部,返回值是无效参数,不是OK,应该是由于graphics本身失败造成的)
if(m_iShowPolygonOutline){
Pen blackPen(Color(255, m_uColorRedP, m_uColorGreenP, m_uColorBlueP), 1);
graphics.DrawPolygon(&blackPen, pa, gWinPntNum);}(绘制外框)
------解决方案--------------------
我们这边也遇到直接使用gdi+绘图出现失败的情况,不知道是不是gdi+库版本问题还是什么问题?
建议使用VS自带的CImage类来绘图吧,功能不是一般的强大,稳定性应该很好的!