void DxFont::BuildFontSheetBitmap(Gdiplus::Font & font, Gdiplus::Graphics & charGraphics, Gdiplus::Bitmap & charBitmap, Gdiplus::Graphics & fontSheetGraphics) { WCHAR charString[ 2 ] = { ' ', 0 }; Gdiplus::SolidBrush whiteBrush( Gdiplus::Color( 255, 255, 255, 255 ) ); UINT fontSheetX = 0; UINT fontSheetY = 0; for( UINT i = 0; i < NumChars; ++i ) { charString[ 0 ] = static_cast<WCHAR>(StartChar + i); charGraphics.Clear(Gdiplus::Color(0, 0, 0, 0)); charGraphics.DrawString(charString, 1, &font, Gdiplus::PointF(0.0f, 0.0f), &whiteBrush); int minX = GetCharMinX(charBitmap); int maxX = GetCharMaxX(charBitmap); int charWidth = maxX - minX + 1; if(fontSheetX + charWidth >= TexWidth) { fontSheetX = 0; fontSheetY += static_cast<int>(CharHeight) + 1; } CharRects[i] = CD3D11_RECT(fontSheetX, fontSheetY, fontSheetX + charWidth, fontSheetY + CharHeight); fontSheetGraphics.DrawImage(&charBitmap, fontSheetX, fontSheetY, minX, 0, charWidth, CharHeight, Gdiplus::UnitPixel); fontSheetX += charWidth + 1; } }
void TupColorPalette::setBaseColorsPanel() { #ifndef Q_OS_ANDROID QSize cellSize(50, 30); #else QSize cellSize(70, 50); #endif k->currentBaseColor = 0; QColor redColor(255, 0, 0); QBrush redBrush(redColor, k->brush.style()); TupColorWidget *red = new TupColorWidget(0, redBrush, cellSize, false); red->selected(); connect(red, SIGNAL(clicked(int)), this, SLOT(updateMatrix(int))); k->baseColors << red; QColor greenColor(0, 255, 0); QBrush greenBrush(greenColor, k->brush.style()); TupColorWidget *green = new TupColorWidget(1, greenBrush, cellSize, false); connect(green, SIGNAL(clicked(int)), this, SLOT(updateMatrix(int))); k->baseColors << green; QColor blueColor(0, 0, 255); QBrush blueBrush(blueColor, k->brush.style()); TupColorWidget *blue = new TupColorWidget(2, blueBrush, cellSize, false); connect(blue, SIGNAL(clicked(int)), this, SLOT(updateMatrix(int))); k->baseColors << blue; QColor whiteColor(255, 255, 255); QBrush whiteBrush(whiteColor, k->brush.style()); TupColorWidget *white = new TupColorWidget(3, whiteBrush, cellSize, false); connect(white, SIGNAL(clicked(int)), this, SLOT(updateMatrix(int))); k->baseColors << white; QBoxLayout *bottomLayout = new QHBoxLayout; bottomLayout->setAlignment(Qt::AlignHCenter); bottomLayout->setContentsMargins(3, 3, 3, 3); #ifndef Q_OS_ANDROID bottomLayout->setSpacing(10); #else bottomLayout->setSpacing(25); #endif bottomLayout->addWidget(red); bottomLayout->addWidget(green); bottomLayout->addWidget(blue); bottomLayout->addWidget(white); k->paletteGlobalLayout->addWidget(new TupSeparator(Qt::Horizontal)); k->paletteGlobalLayout->addLayout(bottomLayout); }
void CPage_Node_Lane::DrawCentroidRadicalLines(CPaintDC *pDC, CRect PlotRect,bool bOriginAngle/*=true*/) { CPen blackPen(PS_SOLID,0,RGB(0,0,0)); CPen greyPen(PS_SOLID,2,RGB(128,128,128)); CPen lanePen(PS_SOLID,1,RGB(0,0,0)); CPen laneSelectedPen(PS_SOLID,2,RGB(255,0,0)); CBrush greyBrush(RGB(128,128,128)); CBrush whiteBrush(RGB(255,255,255)); CBrush redBrush(RGB(255,0,0)); pDC->SetBkMode(TRANSPARENT); CPen *pOldPen = pDC->SelectObject(&blackPen); CBrush* pOldBrush = pDC->SelectObject(&whiteBrush); pDC->Rectangle(PlotRect); GDPoint cntPoint,lefttop,bottomright; CRect centerRect; cntPoint.x = 0.0; cntPoint.y = 0.0; int nRadius2 = m_Para.nCentroidRadius; lefttop.x = cntPoint.x - nRadius2; lefttop.y = cntPoint.y - nRadius2; bottomright.x = cntPoint.x + nRadius2; bottomright.y = cntPoint.y + nRadius2; pDC->SelectObject(&greyPen); pDC->SelectObject(&greyBrush); centerRect = CRect(NPtoSP(lefttop),NPtoSP(bottomright)); pDC->Ellipse(centerRect); for(int i=0;i<m_LinkData.size();i++) { LinkRecord *pRecord = m_LinkData[i]; pDC->SelectObject(&greyPen); DrawRadicalLine(pDC,pRecord,bOriginAngle); pDC->SelectObject(&lanePen); pDC->SelectObject(&greyBrush); DrawLanes(pDC,pRecord,bOriginAngle); pDC->SelectObject(&blackPen); if (pRecord->nLinkID == m_nSelectedLinkID) pDC->SelectObject(&redBrush); DrawLinkPinPoint(pDC,pRecord,bOriginAngle); } // draw selected link pin point pDC->SelectObject(pOldPen); pDC->SelectObject(pOldBrush); }
twoChessBoard::twoChessBoard(QWidget *parent) : QDialog(parent), ui(new Ui::twoChessBoard) { // There are issues with this right now. Hardcoded integers are only used for testing on simulator, not actual phone. this->parent = parent; ui->setupUi(this); ui->widget->setGeometry(QRect(10,130,480,480)); graphicsView = new QGraphicsView(ui->widget); scene = new QGraphicsScene(QRect(-240,-180,480,480)); graphicsView->setGeometry(QRect(0,0,490,490)); graphicsView->setScene(scene); select = 0;//used to check whether a piece is selected or not turn = 1;//used to check which players turn it is //the following are to check how many different kind of pieces are left in the board blackPawnsLeft = 8; whitePawnsLeft = 8; blackRooksLeft = 2; whiteRooksLeft = 2; blackKnightsLeft = 2; whiteKnightsLeft = 2; blackBishopsLeft = 2; whiteBishopsLeft = 2; blackQueenLeft = 1; whiteQueenLeft = 1; blackKingLeft = 1; whiteKingLeft = 1; // colors for pieces QBrush blackBrush(Qt::black); QBrush whiteBrush(Qt::white); QBrush greenBrush(Qt::green); QBrush redBrush(Qt::red); QBrush yellowBrush(Qt::yellow); QBrush blueBrush(Qt::blue); QBrush magentaBrush(Qt::magenta); QBrush grayBrush(Qt::gray); QBrush darkGreenBrush(Qt::darkGreen); QBrush darkRedBrush(Qt::darkRed); QBrush darkYellowBrush(Qt::darkYellow); QBrush darkBlueBrush(Qt::darkBlue); QBrush darkMagentaBrush(Qt::darkMagenta); QBrush darkGrayBrush(Qt::darkGray); QPen pen(Qt::transparent); pen.setWidth(0); // This loop generates the chessboard. Code was written by TA. for(int i=0;i<CHESSBOARD_SIZE;i++){ chessboard[i].resize(CHESSBOARD_SIZE); for(int j = 0 ; j<CHESSBOARD_SIZE;j++){ chessboard[i][j] = new QGraphicsRectItem(CHESSBOARD_GRID_SIZE*(j-CHESSBOARD_SIZE/2) , CHESSBOARD_GRID_SIZE*( -i+CHESSBOARD_SIZE/2) , CHESSBOARD_GRID_SIZE ,CHESSBOARD_GRID_SIZE); scene->addItem(chessboard[i][j]); chessboard[i][j]->setPen(pen); chessboard[i][j]->setBrush(((i+j)%2==0)?blackBrush:whiteBrush); } } graphicsView->show(); qDebug("Initialized chessboard..."); for(int i =0; i<8;i++) { for(int j=0;j<8;j++) { boardvalues[i][j] = 0; } } //initialising the board values for(int i = 0;i<8;i++) { //pawns boardvalues[1][i] = 1; boardvalues[6][i] = 7; } //rooks boardvalues[0][0] = 2; boardvalues[0][7] = 2; boardvalues[7][0] = 8; boardvalues[7][7] = 8; //knights boardvalues[0][1] = 3; boardvalues[0][6] = 3; boardvalues[7][1] =9; boardvalues[7][6] =9; //bishops boardvalues[0][2] = 4; boardvalues[0][5] = 4; boardvalues[7][2] =10; boardvalues[7][5] =10; //queen boardvalues[0][3] = 6; boardvalues[7][3] =12; //king boardvalues[0][4] = 5; boardvalues[7][4] =11; // white pawns for (int i = 0; i < 8; i++) { whitePawns.resize(8); whitePawns[i] = new QGraphicsRectItem(-225+60*i, -105, 30, 30 ); whitePawns[i]->setBrush(greenBrush); scene->addItem(whitePawns[i]); } //black pawns for (int i = 0; i < 8; i++) { blackPawns.resize(8); blackPawns[i] = new QGraphicsRectItem(-225+60*i, 195, 30, 30 ); blackPawns[i]->setBrush(darkGreenBrush); scene->addItem(blackPawns[i]); } // white and black pieces for (int i = 0; i < 2; i++) { whiteRooks.resize(2); whiteRooks[i] = new QGraphicsRectItem(-225+420*i,-165,30,30); whiteRooks[i]->setBrush(redBrush); scene->addItem(whiteRooks[i]); blackRooks.resize(2); blackRooks[i] = new QGraphicsRectItem(-225+420*i,255,30,30); blackRooks[i]->setBrush(darkRedBrush); scene->addItem(blackRooks[i]); whiteKnights.resize(2); whiteKnights[i] = new QGraphicsRectItem(-165+300*i,-165,30,30); whiteKnights[i]->setBrush(yellowBrush); scene->addItem(whiteKnights[i]); blackKnights.resize(2); blackKnights[i] = new QGraphicsRectItem(-165+300*i,255,30,30); blackKnights[i]->setBrush(darkYellowBrush); scene->addItem(blackKnights[i]); whiteBishops.resize(2); whiteBishops[i] = new QGraphicsRectItem(-105+180*i,-165,30,30); whiteBishops[i]->setBrush(blueBrush); scene->addItem(whiteBishops[i]); blackBishops.resize(2); blackBishops[i] = new QGraphicsRectItem(-105+180*i,255,30,30); blackBishops[i]->setBrush(darkBlueBrush); scene->addItem(blackBishops[i]); } whiteQueen = new QGraphicsRectItem(-45,-165,30,30); whiteQueen->setBrush(magentaBrush); scene->addItem(whiteQueen); blackQueen = new QGraphicsRectItem(-45,255,30,30); blackQueen->setBrush(darkMagentaBrush); scene->addItem(blackQueen); whiteKing = new QGraphicsRectItem(15,-165,30,30); whiteKing->setBrush(grayBrush); scene->addItem(whiteKing); blackKing = new QGraphicsRectItem(15,255,30,30); blackKing->setBrush(darkGrayBrush); scene->addItem(blackKing); }
void CPDObjectFrameSelected::DrawThreadRects(Gdiplus::Graphics* pGraphics, Gdiplus::Color& color, IPDMatrix* matrix) { Gdiplus::Pen pen(color); Gdiplus::SolidBrush brush(color); CComQIPtr<IPDObjectFrame> frame = m_object; if (frame) { CComPtr<IPDObject> content; frame->get_content(&content); CComQIPtr<IPDContentText> contentText = content; if (contentText) { PointD m_threadPtLeft; PointD m_threadPtRight; contentText->get_threadPtIn(&m_threadPtLeft); contentText->get_threadPtOut(&m_threadPtRight); double rotation; matrix->getRotation(&rotation); CComPtr<IPDObjectText> previousContentText; contentText->get_previousTextThread(&previousContentText); CComPtr<IPDObjectText> nextContentText; contentText->get_nextTextThread(&nextContentText); Gdiplus::SolidBrush whiteBrush(Gdiplus::Color(255, 255, 255)); { PointD xpt; matrix->transformPoint(&m_threadPtLeft, &xpt); Gdiplus::Rect rc(xpt.x-4, xpt.y-4, 9, 9); pGraphics->FillRectangle(&whiteBrush, rc); pGraphics->DrawRectangle(&pen, rc); if (previousContentText != NULL) { DrawThreadRectArrow(pGraphics, &brush, rc, rotation); } } { PointD xpt; matrix->transformPoint(&m_threadPtRight, &xpt); Gdiplus::Rect rc(xpt.x-4, xpt.y-4, 9, 9); pGraphics->FillRectangle(&whiteBrush, rc); VARIANT_BOOL overflow; contentText->get_overflow(&overflow); if (nextContentText != NULL) { pGraphics->DrawRectangle(&pen, rc); DrawThreadRectArrow(pGraphics, &brush, rc, rotation); } else { if (overflow) { Gdiplus::Pen redPen(Gdiplus::Color(255, 0, 0), 1); pGraphics->DrawRectangle(&redPen, rc); pGraphics->DrawLine(&redPen, rc.X+rc.Width/2, rc.Y+2, rc.X+rc.Width/2, rc.GetBottom()-1); pGraphics->DrawLine(&redPen, rc.X+2, rc.Y+rc.Height/2, rc.GetRight()-1, rc.Y+rc.Height/2); } else { pGraphics->DrawRectangle(&pen, rc); } } } } CComPtr<IPDPathText> pathText; frame->get_pathText(&pathText); if (pathText) { CComPtr<IPDMatrix> mat0; mat0.CoCreateInstance(CLSID_PDMatrix); CComPtr<IPDMatrix> mat1; mat0->translate(-m_pthreadPtLeft.x, -m_pthreadPtLeft.y, &mat1); CComPtr<IPDMatrix> mat2; mat1->rotate(m_pthreadRotationLeft, &mat2); CComPtr<IPDMatrix> mat3; mat2->translate(m_pthreadPtLeft.x, m_pthreadPtLeft.y, &mat3); CComPtr<IPDMatrix> mat; mat3->multiply(matrix, &mat); double x = m_pthreadPtLeft.x; double y = m_pthreadPtLeft.y; // { PointD xpt1; mat->transformPoint((PointD*)&CDblPoint(x, y), &xpt1); PointD xpt2; mat->transformPoint((PointD*)&CDblPoint(x, y+20), &xpt2); pGraphics->DrawLine(&pen, (float)xpt1.x, (float)xpt1.y, (float)xpt2.x, (float)xpt2.y); } { PointD pts[4] = { x, y, x-12, y, x-12, y+12, x, y+12 }; PointD xpts[4]; for (int i = 0; i < 4; i++) { mat->transformPoint(&pts[i], &xpts[i]); } pGraphics->DrawLine(&pen, (float)xpts[0].x, (float)xpts[0].y, (float)xpts[1].x, (float)xpts[1].y); pGraphics->DrawLine(&pen, (float)xpts[1].x, (float)xpts[1].y, (float)xpts[2].x, (float)xpts[2].y); pGraphics->DrawLine(&pen, (float)xpts[2].x, (float)xpts[2].y, (float)xpts[3].x, (float)xpts[3].y); pGraphics->DrawLine(&pen, (float)xpts[3].x, (float)xpts[3].y, (float)xpts[0].x, (float)xpts[0].y); } } } }
static void __fastcall SaveBitmap2Tiff(Gdiplus::Bitmap *bm, int npage) { //------------------------------------------------------------------------------- // Выводит очередную страницу в файл *.tif | // Если npage == 0, то не выводит номер страницы | // Полагает, что если это многостраничный файл, то страница уже выбрана | //------------------------------------------------------------------------------- if (SaveBitmap2TiffState == 0) return; // ------------------ для начала строим образ в SaveBitmap2TiffBitmap32 (SaveBitmap2TiffGraphics) int x, y, w, h; h = bm->GetHeight(); w = bm->GetWidth(); Gdiplus::SolidBrush whiteBrush(Gdiplus::Color(255, 255, 255, 255)); SaveBitmap2TiffGraphics->FillRectangle(&whiteBrush, Gdiplus::Rect(0, 0, SaveBitmapW, SaveBitmapH)); //Gdiplus::Matrix matr; Gdiplus::Rect r; //if (w > h) { // Если изображение шире, чем выше // matr.Rotate(270.0f); // поворачиваем его на 270 градусов // SaveBitmap2TiffGraphics->SetTransform(&matr); // r.X = -SaveBitmapH; // r.Y = -30; // r.Width = SaveBitmapH - 30; // r.Height = SaveBitmapW - 30; //} else { // r.X = 30; // r.Y = 0; // r.Width = SaveBitmapW - 30; // r.Height = SaveBitmapH - 30; //} r.X = 0; r.Y = 0; r.Width = SaveBitmapW; r.Height = SaveBitmapH; SaveBitmap2TiffGraphics->DrawImage(bm, r, 0, 0, w, h, Gdiplus::UnitPixel, 0, 0, 0); // matr.Reset(); // SaveBitmap2TiffGraphics->SetTransform(&matr); if (npage != 0) { // Здесь выводим номер страницы AnsiString snum; wchar_t wnum[20]; Gdiplus::Pen whitePen40(Gdiplus::Color(255, 255, 255, 255), 45); snum.printf("%d", npage); snum.WideChar(wnum, 20); Gdiplus::Font myFont(L"Arial", 40, Gdiplus::FontStyleBold); Gdiplus::PointF origin(SaveBitmapW - 160, 20.0f); Gdiplus::SolidBrush blackBrush(Gdiplus::Color(255, 0, 0, 0)); SaveBitmap2TiffGraphics->DrawLine(&whitePen40, SaveBitmapW - 200, 50, SaveBitmapW, 50); if (npage > 0) { SaveBitmap2TiffGraphics->DrawString(wnum, -1, &myFont, origin, &blackBrush); } } // ------- строим SaveBitmap2TiffBitmap1 UINT *pix; unsigned char byte, bit, *pix1; w = SaveBitmapW; h = SaveBitmapH; Gdiplus::Rect BitsRect(0, 0, SaveBitmapW, SaveBitmapH); Gdiplus::BitmapData *bits = new Gdiplus::BitmapData; Gdiplus::BitmapData *bits1 = new Gdiplus::BitmapData; sres = SaveBitmap2TiffBitmap32->LockBits(&BitsRect, Gdiplus::ImageLockModeRead, PixelFormat32bppARGB, bits); sres = SaveBitmap2TiffBitmap1->LockBits(&BitsRect, Gdiplus::ImageLockModeWrite, PixelFormat1bppIndexed, bits1); for (y = 0; y < SaveBitmapH; y++) { pix = (UINT *)((int)bits->Scan0 + bits->Stride * y); pix1 = (unsigned char *)((int)bits1->Scan0 + bits1->Stride * y); byte = 0; for (x = 0; x < SaveBitmapW; x++, pix++) { if ((*pix & 0xFF) > 0xD8) { bit = 1; } else bit = 0; byte <<= 1; byte |= bit; if ((x & 7) == 7) { *pix1++ = byte; byte = 0; } } } SaveBitmap2TiffBitmap32->UnlockBits(bits); delete bits; SaveBitmap2TiffBitmap1->UnlockBits(bits1); delete bits1; // ------- и наконец выводим очередную страницу SaveBitmap2TiffBitmap1 Gdiplus::EncoderParameters encoderParameters; ULONG parameterValue; // An EncoderParameters object has an array of // EncoderParameter objects. In this case, there is only // one EncoderParameter object in the array. encoderParameters.Count = 1; // Initialize the one EncoderParameter object. // encoderParameters.Parameter[0].Guid = Gdiplus::EncoderSaveFlag; encoderParameters.Parameter[0].Guid = aEncoderSaveFlag; encoderParameters.Parameter[0].Type = Gdiplus::EncoderParameterValueTypeLong; encoderParameters.Parameter[0].NumberOfValues = 1; encoderParameters.Parameter[0].Value = ¶meterValue; // Get the CLSID of the TIFF encoder. CLSID encoderClsid; GetEncoderClsid(L"image/tiff", &encoderClsid); if (SaveBitmap2TiffState == 1) { // Требуется вывести первую страницу parameterValue = Gdiplus::EncoderValueMultiFrame; sres = SaveBitmap2TiffBitmap1->Save(SaveBitmap2TiffFiln, &encoderClsid, &encoderParameters); } else { parameterValue = Gdiplus::EncoderValueFrameDimensionPage; sres = SaveBitmap2TiffBitmap1->SaveAdd(&encoderParameters); } SaveBitmap2TiffState = 2; }