void update() { m_pImage->clear(0xff000000); // a=ff, r=00, g=00, b=00 HelloModel* pModel = m_pController->model(); m_pImage->text(g_szMessage, pModel->x(), pModel->y(), TEXT_SIZE, 0xffffff30); // a=ff, r=ff, g=ff, b=30 m_pCanvas->setImage(m_pImage); }
// static void GSubImageFinder2::test() { // Make some random image GImage foo; foo.setSize(256, 256); foo.clear(0xff000000); foo.boxFill(13, 8, 12, 17, 0xff808030); foo.boxFill(8, 13, 10, 9, 0xff407040); foo.boxFill(20, 20, 220, 220, 0xffffffee); // Make the finder GSubImageFinder2 finder(&foo); // Make a sub-image GRect r2(0, 0, 256, 256); GRect r; r.x = 13; r.y = 17; r.w = 32; r.h = 32; GImage bar; bar.setSize(32, 32); bar.blit(0, 0, &foo, &r); // Find the sub-image r.x = 0; r.y = 0; int x, y; finder.findSubImage(&x, &y, &bar, &r); if(x != 13 || y != 17) throw "wrong answer"; }
// static void GPlotWindow::stringLabel(GImage* pImage, const char* szText, int x, int y, float size, unsigned int color, double angle) { // Draw the label such that it ends at the center of the temp image int width = GImage::measureTextWidth(szText, size); int nSize = (int)(std::max((float)width, size * 12) * 2.3); GImage tmp; tmp.setSize(nSize, nSize); tmp.clear(0x0); tmp.text(szText, nSize / 2 - width, (int)((nSize - size * 12) / 2), size, color, 1000, 1000); // Rotate the label around the center GImage tmp2; tmp2.rotate(&tmp, nSize / 2, nSize / 2, angle); // Blit such that the label ends at the specified point GRect r(0, 0, nSize, nSize); pImage->blitAlpha(x - nSize / 2, y - nSize / 2, &tmp2, &r); }
void Redraw(bool forw) { m_pImage->clear(0xff80c0e0); // Draw the hill { int i, j; double x, y; for(i = 0; i < (int)m_pImage->width(); i++) { x = (double)i * 1.4 / m_pImage->width() - 0.4; y = x * x - x * x * x; j = (int)(m_pImage->height() - y * 3 * m_pImage->height() - 50); m_pImage->lineNoChecks(i, j, i, m_pImage->height() - 1, 0xff40a060); } } // Draw the car DrawCar(); // Draw the acceleration arrow m_pImage->arrow(240, 20, 240 + (forw ? 15 : -15), 20, 0xff000000, 10); }
GImage* GPlotWindow::labelAxes(int maxHorizAxisLabels, int maxVertAxisLabels, int precision, float size, unsigned int color, double angle) { int spacing = 10; int horizMargin = 200; int vertMargin = 200; GImage* pOutImage = new GImage(); pOutImage->setSize(m_pImage->width() + horizMargin, m_pImage->height() + vertMargin); pOutImage->clear(0xffffffff); GRect r(0, 0, m_pImage->width(), m_pImage->height()); pOutImage->blit(horizMargin, 0, m_pImage, &r); if(maxHorizAxisLabels > 0) { GPlotLabelSpacer spacer(m_window.x, m_window.x + m_window.w, maxHorizAxisLabels); for(int i = 0; i < spacer.count(); i++) { double pos = spacer.label(i); int x1, y1; windowToView(pos, 0, &x1, &y1); numericLabel(pOutImage, pos, horizMargin + x1, m_pImage->height() + spacing, precision, size, color, angle); } } else if(maxHorizAxisLabels == -1) { GPlotLabelSpacerLogarithmic spacer(m_window.x, m_window.x + m_window.w); while(true) { double pos; bool primary; if(!spacer.next(&pos, &primary)) break; if(primary) { double x = log(pos); int x1, y1; windowToView(x, 0, &x1, &y1); numericLabel(pOutImage, pos, horizMargin + x1, m_pImage->height() + spacing, precision, size, color, angle); } } } if(maxVertAxisLabels > 0) { GPlotLabelSpacer spacer(m_window.y, m_window.y + m_window.h, maxVertAxisLabels); for(int i = 0; i < spacer.count(); i++) { double pos = spacer.label(i); int x1, y1; windowToView(0, pos, &x1, &y1); numericLabel(pOutImage, pos, horizMargin - spacing, y1, precision, size, color, 0.0); } } else if(maxVertAxisLabels == -1) { GPlotLabelSpacerLogarithmic spacer(m_window.y, m_window.y + m_window.h); while(true) { double pos; bool primary; if(!spacer.next(&pos, &primary)) break; if(primary) { double y = log(pos); int x1, y1; windowToView(0, y, &x1, &y1); numericLabel(pOutImage, pos, horizMargin - spacing, y1, precision, size, color, 0.0); } } } return pOutImage; }