SlideShare una empresa de Scribd logo
1 de 37
openFrameworks
     graphics
Graphics
• The graphics part of OF lets you draw images,
  lines, circles, paths etc..

• Pixel operations like crop, resize and scale.
• Other types like paths, polylines, tesselator, true
  type fonts, bitmap fonts
Graphics
 ofPixels

 ofImage              ofBitmapFont

ofGraphics           ofTrueTypeFont


                         ofPixelUtils
ofPolyLine
                       ofTesselator
  ofPath
                    ofRenderCollection
ofPolyUtils
                     ofCairoRenderer
Render to PDF
      ofRenderCollection   ofCairoRenderer



OF gives you render to PDF... out of the box! for
free!

Make a call to ofBeginSaveScreenAsPDF() to begin
drawing to PDF and ofEndSaveScreenAsPDF() when
ready. That’s it!
Render to PDF
testApp.cpp                                          testApp.h
void testApp::setup(){                               class testApp : public ofBaseApp{

 ofBackground(33,33,33);

 to_pdf = false;                                    
   public:
}                                                    
   
    bool to_pdf;
                                                     }

void testApp::draw(){

 if(to_pdf) {

 
      ofBeginSaveScreenAsPDF("render.pdf");

 }


 ofSetColor(0xFF, 0xFF, 0xFF);

 ofCircle(ofGetWidth()*0.5,ofGetHeight()*0.5,10);


 if(to_pdf) {

 
      ofEndSaveScreenAsPDF();

 
      to_pdf = !to_pdf;

 }
}

void testApp::keyPressed(int key){

 if(key == 'p') {

 
      to_pdf = !to_pdf;

 }
}
Render to PDF
Image loading
     ofPixels        ofImage        ofGraphics



Load images of a variety of types and draw them
on screen. Resize, crop, rotate, save to file, etc..

To draw an image on screen create a ofImage
member and call it’s
loadImage(string file) function. In your
testApp::draw(), call my_img.draw(0,0)
Image loading




void testApp::setup(){

 if(!my_img.loadImage("freakday.png")) {

 
      ofLog(OF_LOG_ERROR, "Error while loading image");

 }
}

void testApp::draw(){

 my_img.draw(0,0,ofGetWidth(), ofGetHeight());
}
Image from web
You can also load images from an URL. Call the
ofImage::loadImage(string url) with the address of
the image.
This call is synchronous so waits until the image is
downloaded.

void testApp::setup(){

 if(!my_img.loadImage("http://www.roxlu.com/assets/downloads/freakday.png")) {

 
      ofLog(OF_LOG_ERROR, "Error while loading image");

 }
}

void testApp::draw(){

 my_img.draw(0,0, ofGetWidth(), ofGetHeight());
}
Altering pixels
ofImage and ofPixels have many functions to alter
the pixels. After manipulating the pixels with one
of the functions in the list below, never forget
calling update() to update the pixels so they
become visible.



You need to call update() after using:
setPixel()
Changing pixels
Use ofImage::setColor(r,g,b,a) to change the color
of a pixel. Make sure to call ofImage::update() after
using setColor(). To retrieve the value of a pixel
use
ofImage::getColor(int x, int y)


for(int i = 10; i < 200; ++i) {

 for(int j = 10; j < 200; ++j) {

 
       my_img.setColor(i,j,ofColor(255,0,0));

 }
}
my_img.update();
Resizing
Use ofImage::resize(int new_width, int new_height)
to resize the image.




if(!my_img.loadImage("http://www.roxlu.com/assets/downloads/freakday.png")) {

 ofLog(OF_LOG_ERROR, "Error while loading image");
}
my_img.resize(100,100);
Rotating
      Use ofImage::rotate90(int times) to rotate the
      image 90º a times number of times. no need to
      call update() afterwards.




my_img.rotate90(0);   my_img.rotate90(1);   my_img.rotate90(2);   my_img.rotate90(3);
Mirroring
Use ofImage::mirror(bool vertical, bool horizontal)
to mirror the image.




   my_img.mirror(false,false);   my_img.mirror(true,false);




   my_img.mirror(false,true);    my_img.mirror(true,true);
Cropping
Use ofImage::crop(int x, int y, int w, int h) to crop
the image.




        int s = 80;
        my_img.crop(s,s,my_img.width - s, my_img.height - s);
Crop from other image
       Use cropFrom to get pixels from another image
       and store them in your img object.
       ofImage::cropFrom(ofImage& other,int x, int y, int w, int h)




ofImage of_logo;
if(!of_logo.loadImage("http://www.openframeworks.cc/wp-content/themes/ofw/images/ofw-logo.gif")) {

 ofLog(OF_LOG_ERROR, "Error while loading OF logo image");
}
else {

 my_img.cropFrom(of_logo,0,0,of_logo.width,of_logo.height);
}
Saving back to disk
Use ofImage::saveImage(string file) to save the
image back to disk. This example writes a
thumbnail to disk. Note that it handles image type
conversion.


if(!my_img.loadImage("http://www.roxlu.com/assets/downloads/freakday.png")) {

 ofLog(OF_LOG_ERROR, "Error while loading image");
}
my_img.resize(100,100);
my_img.saveImage("thumb.png");
my_img.saveImage("thumb.jpg");
my_img.saveImage("thumb.gif");
Image anchor points
          The image anchor point is the point around which
          the image is drawn. Use
          ofImage::setAnchorPercent(float,float) or
          ofImage::setAnchorPoint(int, int)





   my_img.loadImage("freakday.png");

   my_img.resize(100,100);                            my_img.setAnchorPercent(1,1);

   my_img.setAnchorPercent(0.5,0.5);

   my_img.draw(ofGetWidth()*0.5,ofGetHeight()*0.5);
ofImage recap
Constructors
ofImage(const string& filename)

ofImage(const ofPixels_<PixelType>& pix)

ofImage(const ofFile& file)


Texture related
void allocate(int w, int h, ofImageType type)

void clear()

void setUseTexture(bool use)

bool isUsingTexture()

ofTexture& getTextureReference()

void bind()

void unbind()
ofImage recap
Loading
bool loadImage(string filename)

bool loadImage(const ofBuffer& buffer)

bool loadImage(const ofFile& file)




Save
void saveImage(string filename, ofImageQualityType comp = OF_IMAGE_QUALITY_BEST)

void saveImage(ofBuffer& buffer, ofImageQualityType comp = OF_IMAGE_QUALITY_BEST)

void saveImage(const ofFile& file, ofImageQualityType comp = OF_IMAGE_QUALITY_BEST)
ofImage recap

Texture compression
void setCompression(ofTexCompression compression)




Get pixels
ofColor_<PixelType> getColor(int x, int y)

PixelType* getPixels()

ofPixels_<PixelType>& getPixelsRef()
ofImage recap
Altering the image
void setColor(int x, int y, ofColor_<PixelType> color)

void setFromPixels(const PixelType* pixels, int w, int h, ofImageType type, bool isOrderRGB = true)

void setFromPixels(const ofPixels_<PixelType>& pixels)

void setImageType(ofImageType type)

void resize(int w, int h)

void grabScreen(int x, int y, int w, int h)

void crop(int x, int y, int w, int h)

void cropFrom(ofImage_<PixelType>& otherImage, int x, int y, int w, int h)

void rotate90(int rotation)

void mirror(bool vertical, bool horizontal)
ofImage recap
Anchor points
void setAnchorPercent(float xPct, float yPct)

void setAnchorPoint(float x, float y)

void resetAnchor()




General
bool isAllocated()

void reloadTexture()

float getWidth()

float getHeight()
ofImage recap
Image quality             (some) Image formats
OF_IMAGE_QUALITY_BEST     OF_IMAGE_FORMAT_JPEG

OF_IMAGE_QUALITY_HIGHT    OF_IMAGE_FORMAT_PNG

OF_IMAGE_QUALITY_MEDIUM   OF_IMAGE_FORMAT_RAW

OF_IMAGE_QUALITY_LOW      OF_IMAGE_FORMAT_TIFF

OF_IMAGE_QUALITY_WORST    OF_IMAGE_FORMAT_HDR

                          OF_IMAGE_FORMAT_TARGA
Image types
                          OF_IMAGE_FORMAT_BMP
OF_IMAGE_GRAYSCALE
                          OF_IMAGE_FORMAT_ICO
OF_IMAGE_COLOR

OF_IMAGE_COLOR_ALPHA      For more image formats see ofImage.h

OF_IMAGE_UNDEFINED
ofPixels
                     ofPixels



Similar to ofImage, but works directly with raw
pixels. Has functions like rotate, mirror, crop,
pastInto etc..

See ofPixels.h for a reference of the available
operations.
ofGraphics
                   ofGraphics



ofGraphics is the part of OF which mimics the
processing style of drawing functions. But besides
the regular drawing functions it contains lots of
general drawing related setter/getter functions.
ofGraphics
Drawing things
You can draw every shape you want using the
“raw” vertex functions and begin/end shape. Or
use the helper functions to draw circles, lines,
rectangles, ellipses and triangles. Some functions
you can use:

Simple shapes             Custom shapes


void ofTriangle(...)      void ofBeginShape(...)

void ofCircle(...)        void ofVertex(...)

float ofEllipse(...)       void ofVertexes(...)

float ofLine(...)          void ofEndShape(...)
ofNoFill();
ofTriangle(60,30, 200,200, 60,200);
                                      ofTriangle(60,30, 200,200, 60,200);




ofCircle(170, 120, 30);               ofNoFill();
                                      ofSetCircleResolution(5);
                                      ofCircle(170, 120, 30);
Reset state
                                 When you call a function like
                                 ofFill, ofNoFill,
                                 ofSetCircleResolution it’s
                                 called “changing the state”.
                                 This state is used as long as
                                 you change it again. So when

   ofSetCircleResolution(50);   you called ofNoFill all things

   ofFill();

   ofCircle(30, 35, 25);        after this call will be drawn

   ofCircle(170, 120, 30);

                                without a fill.

   ofSetCircleResolution(5);

   ofNoFill();

   ofCircle(70, 35, 25);

   ofCircle(130, 120, 30);
ofEllipse(160,120,100,50);   ofEllipse(160,120,50,100);




ofSetCircleResolution(6);    ofNoFill();
ofEllipse(160,120,50,100);   ofEllipse(160,120,50,100);
ofLine(10,120,310,100);   ofSetLineWidth(5);
                          ofLine(10,120,310,100);




ofVec2f a(10,120);        ofRect(40,50,230,130);
ofVec2f b(310,100);
ofLine(a,b);
Beziers and curves




ofSetLineWidth(5);   ofSetLineWidth(3);
ofNoFill();          ofNoFill();
ofCurve(             ofBezier(

   10,10            
   10,10

 ,55,15             
 ,55,15

 ,15,210            
 ,15,210

 ,100,200           
 ,100,200
);                   );
Custom shapes




ofBeginShape();        ofBeginShape();

 ofVertex(140,40);    for(float i = 0; i < 30; ++i) {

 ofVertex(130,40);    
 float r = sin(i/30 * PI) * 70;

 ofVertex(100,100);   
 float x = 180 + cos((i/30)*TWO_PI) * r;

 ofVertex(110,100);   
 float y = 120 + sin((i/30)*TWO_PI) * r;
ofEndShape();          
 ofVertex(x,y);
                       }
                       ofEndShape();
ofLove()




ofBeginShape();
for(float i = 0; i < TWO_PI; i+= 0.01*HALF_PI*0.5) {

 float r = (2 - 2*sin(i) + sin(i)*sqrt(abs(cos(i))) / (sin(i)+1.4)) * -40;

 float x = 180 + cos(i) * r;

 float y = 60 + sin(i) * r;

 ofVertex(x,y);
}
ofEndShape();
3D Sphere




ofNoFill();                     ofNoFill();
ofSphere(160,120,50,50);        ofSphere(160,120,50,100);
3D Box




ofNoFill();                ofNoFill();
ofBox(160,120,10,50);      ofBox(160,120,10,120);
roxlu
www.roxlu.com

Más contenido relacionado

La actualidad más candente

Bac blanc base de données
Bac blanc base de donnéesBac blanc base de données
Bac blanc base de donnéeslycee
 
Benharratharijtp4 arbre de décision
Benharratharijtp4 arbre de décisionBenharratharijtp4 arbre de décision
Benharratharijtp4 arbre de décisionARIJ BenHarrath
 
XML Avancé : DTD, XSD, XPATH, XSLT, XQuery
XML Avancé : DTD, XSD, XPATH, XSLT, XQueryXML Avancé : DTD, XSD, XPATH, XSLT, XQuery
XML Avancé : DTD, XSD, XPATH, XSLT, XQueryRachid NID SAID
 
ElasticSearch : Architecture et Développement
ElasticSearch : Architecture et DéveloppementElasticSearch : Architecture et Développement
ElasticSearch : Architecture et DéveloppementMohamed hedi Abidi
 
Ergonomie(1) (1)
Ergonomie(1) (1)Ergonomie(1) (1)
Ergonomie(1) (1)Emillezola
 
Guía 05. Consultas resumen con MySQL - José J Sánchez H
Guía 05. Consultas resumen con MySQL - José J Sánchez HGuía 05. Consultas resumen con MySQL - José J Sánchez H
Guía 05. Consultas resumen con MySQL - José J Sánchez HJosé Ricardo Tillero Giménez
 
Les algorithmes d'arithmetique
Les algorithmes d'arithmetiqueLes algorithmes d'arithmetique
Les algorithmes d'arithmetiquemohamed_SAYARI
 
FireDAC - Embarcadero Conference 2015
FireDAC - Embarcadero Conference 2015FireDAC - Embarcadero Conference 2015
FireDAC - Embarcadero Conference 2015Guinther Pauli
 
Création de Vues | SQL Oracle
Création de Vues | SQL OracleCréation de Vues | SQL Oracle
Création de Vues | SQL Oraclewebreaker
 
Correction Examen 2016-2017 POO .pdf
Correction Examen 2016-2017 POO .pdfCorrection Examen 2016-2017 POO .pdf
Correction Examen 2016-2017 POO .pdfslimyaich3
 
Android-Tp4: stockage
Android-Tp4: stockageAndroid-Tp4: stockage
Android-Tp4: stockageLilia Sfaxi
 
Cour excel informatique de gestion semestre4
Cour excel informatique de gestion semestre4Cour excel informatique de gestion semestre4
Cour excel informatique de gestion semestre4Jamal Yasser
 

La actualidad más candente (20)

Bac blanc base de données
Bac blanc base de donnéesBac blanc base de données
Bac blanc base de données
 
Benharratharijtp4 arbre de décision
Benharratharijtp4 arbre de décisionBenharratharijtp4 arbre de décision
Benharratharijtp4 arbre de décision
 
XML Avancé : DTD, XSD, XPATH, XSLT, XQuery
XML Avancé : DTD, XSD, XPATH, XSLT, XQueryXML Avancé : DTD, XSD, XPATH, XSLT, XQuery
XML Avancé : DTD, XSD, XPATH, XSLT, XQuery
 
Signal
SignalSignal
Signal
 
ElasticSearch : Architecture et Développement
ElasticSearch : Architecture et DéveloppementElasticSearch : Architecture et Développement
ElasticSearch : Architecture et Développement
 
MongoDB
MongoDBMongoDB
MongoDB
 
Generateur de code java (GenJAVA)
Generateur de code java (GenJAVA)Generateur de code java (GenJAVA)
Generateur de code java (GenJAVA)
 
Ergonomie(1) (1)
Ergonomie(1) (1)Ergonomie(1) (1)
Ergonomie(1) (1)
 
Guía 05. Consultas resumen con MySQL - José J Sánchez H
Guía 05. Consultas resumen con MySQL - José J Sánchez HGuía 05. Consultas resumen con MySQL - José J Sánchez H
Guía 05. Consultas resumen con MySQL - José J Sánchez H
 
Les algorithmes d'arithmetique
Les algorithmes d'arithmetiqueLes algorithmes d'arithmetique
Les algorithmes d'arithmetique
 
Cours design pattern m youssfi partie 3 decorateur
Cours design pattern m youssfi partie 3 decorateurCours design pattern m youssfi partie 3 decorateur
Cours design pattern m youssfi partie 3 decorateur
 
FireDAC - Embarcadero Conference 2015
FireDAC - Embarcadero Conference 2015FireDAC - Embarcadero Conference 2015
FireDAC - Embarcadero Conference 2015
 
Plsql
PlsqlPlsql
Plsql
 
Création de Vues | SQL Oracle
Création de Vues | SQL OracleCréation de Vues | SQL Oracle
Création de Vues | SQL Oracle
 
SQL-ORACLE.pptx
SQL-ORACLE.pptxSQL-ORACLE.pptx
SQL-ORACLE.pptx
 
Patrons de conception
Patrons de conceptionPatrons de conception
Patrons de conception
 
PLSQL Cursors
PLSQL CursorsPLSQL Cursors
PLSQL Cursors
 
Correction Examen 2016-2017 POO .pdf
Correction Examen 2016-2017 POO .pdfCorrection Examen 2016-2017 POO .pdf
Correction Examen 2016-2017 POO .pdf
 
Android-Tp4: stockage
Android-Tp4: stockageAndroid-Tp4: stockage
Android-Tp4: stockage
 
Cour excel informatique de gestion semestre4
Cour excel informatique de gestion semestre4Cour excel informatique de gestion semestre4
Cour excel informatique de gestion semestre4
 

Destacado

openFrameworks 007 - video
openFrameworks 007 - videoopenFrameworks 007 - video
openFrameworks 007 - videoroxlu
 
openFrameworks 007 - events
openFrameworks 007 - eventsopenFrameworks 007 - events
openFrameworks 007 - eventsroxlu
 
openFrameworks 007 - GL
openFrameworks 007 - GL openFrameworks 007 - GL
openFrameworks 007 - GL roxlu
 
openFrameworks 007 - utils
openFrameworks 007 - utilsopenFrameworks 007 - utils
openFrameworks 007 - utilsroxlu
 
openFrameworks 007 - 3D
openFrameworks 007 - 3DopenFrameworks 007 - 3D
openFrameworks 007 - 3Droxlu
 
openFrameworks 007 - sound
openFrameworks 007 - soundopenFrameworks 007 - sound
openFrameworks 007 - soundroxlu
 
Media Art II 2013 第7回 : openFrameworks 3Dグラフィクス、OpenGL
Media Art II 2013 第7回 : openFrameworks 3Dグラフィクス、OpenGLMedia Art II 2013 第7回 : openFrameworks 3Dグラフィクス、OpenGL
Media Art II 2013 第7回 : openFrameworks 3Dグラフィクス、OpenGLAtsushi Tadokoro
 
Creative Coding with Processing
Creative Coding with Processing Creative Coding with Processing
Creative Coding with Processing Christian Gwiozda
 

Destacado (9)

openFrameworks 007 - video
openFrameworks 007 - videoopenFrameworks 007 - video
openFrameworks 007 - video
 
openFrameworks 007 - events
openFrameworks 007 - eventsopenFrameworks 007 - events
openFrameworks 007 - events
 
openFrameworks 007 - GL
openFrameworks 007 - GL openFrameworks 007 - GL
openFrameworks 007 - GL
 
openFrameworks 007 - utils
openFrameworks 007 - utilsopenFrameworks 007 - utils
openFrameworks 007 - utils
 
openFrameworks 007 - 3D
openFrameworks 007 - 3DopenFrameworks 007 - 3D
openFrameworks 007 - 3D
 
Grid help, Processing
Grid help, ProcessingGrid help, Processing
Grid help, Processing
 
openFrameworks 007 - sound
openFrameworks 007 - soundopenFrameworks 007 - sound
openFrameworks 007 - sound
 
Media Art II 2013 第7回 : openFrameworks 3Dグラフィクス、OpenGL
Media Art II 2013 第7回 : openFrameworks 3Dグラフィクス、OpenGLMedia Art II 2013 第7回 : openFrameworks 3Dグラフィクス、OpenGL
Media Art II 2013 第7回 : openFrameworks 3Dグラフィクス、OpenGL
 
Creative Coding with Processing
Creative Coding with Processing Creative Coding with Processing
Creative Coding with Processing
 

Similar a openFrameworks 007 - graphics

Creating an Uber Clone - Part IV - Transcript.pdf
Creating an Uber Clone - Part IV - Transcript.pdfCreating an Uber Clone - Part IV - Transcript.pdf
Creating an Uber Clone - Part IV - Transcript.pdfShaiAlmog1
 
CE344L-200365-Lab5.pdf
CE344L-200365-Lab5.pdfCE344L-200365-Lab5.pdf
CE344L-200365-Lab5.pdfUmarMustafa13
 
Client Side Programming with Applet
Client Side Programming with AppletClient Side Programming with Applet
Client Side Programming with Appletbackdoor
 
Enhancing UI/UX using Java animations
Enhancing UI/UX using Java animationsEnhancing UI/UX using Java animations
Enhancing UI/UX using Java animationsNaman Dwivedi
 
Animations - Part 3.pdf
Animations - Part 3.pdfAnimations - Part 3.pdf
Animations - Part 3.pdfShaiAlmog1
 
DIWE - Using Extensions and Image Manipulation
DIWE - Using Extensions and Image ManipulationDIWE - Using Extensions and Image Manipulation
DIWE - Using Extensions and Image ManipulationRasan Samarasinghe
 
SwiftUI Animation - The basic overview
SwiftUI Animation - The basic overviewSwiftUI Animation - The basic overview
SwiftUI Animation - The basic overviewWannitaTolaema
 
Introduction to Coding
Introduction to CodingIntroduction to Coding
Introduction to CodingFabio506452
 
Circles graphic
Circles graphicCircles graphic
Circles graphicalldesign
 
write a MATLAB GUI program that implements an ultrasound image viewi.pdf
write a MATLAB GUI program that implements an ultrasound image viewi.pdfwrite a MATLAB GUI program that implements an ultrasound image viewi.pdf
write a MATLAB GUI program that implements an ultrasound image viewi.pdffootstatus
 
XIX PUG-PE - Pygame game development
XIX PUG-PE - Pygame game developmentXIX PUG-PE - Pygame game development
XIX PUG-PE - Pygame game developmentmatheuscmpm
 

Similar a openFrameworks 007 - graphics (20)

Creating an Uber Clone - Part IV - Transcript.pdf
Creating an Uber Clone - Part IV - Transcript.pdfCreating an Uber Clone - Part IV - Transcript.pdf
Creating an Uber Clone - Part IV - Transcript.pdf
 
Of class1
Of class1Of class1
Of class1
 
Open Cv Tutorial Ii
Open Cv Tutorial IiOpen Cv Tutorial Ii
Open Cv Tutorial Ii
 
Open Cv Tutorial Ii
Open Cv Tutorial IiOpen Cv Tutorial Ii
Open Cv Tutorial Ii
 
CE344L-200365-Lab5.pdf
CE344L-200365-Lab5.pdfCE344L-200365-Lab5.pdf
CE344L-200365-Lab5.pdf
 
Client Side Programming with Applet
Client Side Programming with AppletClient Side Programming with Applet
Client Side Programming with Applet
 
Graphics in C++
Graphics in C++Graphics in C++
Graphics in C++
 
Enhancing UI/UX using Java animations
Enhancing UI/UX using Java animationsEnhancing UI/UX using Java animations
Enhancing UI/UX using Java animations
 
Animations - Part 3.pdf
Animations - Part 3.pdfAnimations - Part 3.pdf
Animations - Part 3.pdf
 
DIWE - Using Extensions and Image Manipulation
DIWE - Using Extensions and Image ManipulationDIWE - Using Extensions and Image Manipulation
DIWE - Using Extensions and Image Manipulation
 
SwiftUI Animation - The basic overview
SwiftUI Animation - The basic overviewSwiftUI Animation - The basic overview
SwiftUI Animation - The basic overview
 
Introduction to Coding
Introduction to CodingIntroduction to Coding
Introduction to Coding
 
Cpp tutorial
Cpp tutorialCpp tutorial
Cpp tutorial
 
Scmad Chapter07
Scmad Chapter07Scmad Chapter07
Scmad Chapter07
 
Circles graphic
Circles graphicCircles graphic
Circles graphic
 
Introduction to graphics programming in c
Introduction to graphics programming in cIntroduction to graphics programming in c
Introduction to graphics programming in c
 
HTML 5_Canvas
HTML 5_CanvasHTML 5_Canvas
HTML 5_Canvas
 
Applet life cycle
Applet life cycleApplet life cycle
Applet life cycle
 
write a MATLAB GUI program that implements an ultrasound image viewi.pdf
write a MATLAB GUI program that implements an ultrasound image viewi.pdfwrite a MATLAB GUI program that implements an ultrasound image viewi.pdf
write a MATLAB GUI program that implements an ultrasound image viewi.pdf
 
XIX PUG-PE - Pygame game development
XIX PUG-PE - Pygame game developmentXIX PUG-PE - Pygame game development
XIX PUG-PE - Pygame game development
 

Último

"I see eyes in my soup": How Delivery Hero implemented the safety system for ...
"I see eyes in my soup": How Delivery Hero implemented the safety system for ..."I see eyes in my soup": How Delivery Hero implemented the safety system for ...
"I see eyes in my soup": How Delivery Hero implemented the safety system for ...Zilliz
 
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemkeProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemkeProduct Anonymous
 
Why Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire businessWhy Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire businesspanagenda
 
DEV meet-up UiPath Document Understanding May 7 2024 Amsterdam
DEV meet-up UiPath Document Understanding May 7 2024 AmsterdamDEV meet-up UiPath Document Understanding May 7 2024 Amsterdam
DEV meet-up UiPath Document Understanding May 7 2024 AmsterdamUiPathCommunity
 
TrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
TrustArc Webinar - Unlock the Power of AI-Driven Data DiscoveryTrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
TrustArc Webinar - Unlock the Power of AI-Driven Data DiscoveryTrustArc
 
Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...
Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...
Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...apidays
 
Manulife - Insurer Transformation Award 2024
Manulife - Insurer Transformation Award 2024Manulife - Insurer Transformation Award 2024
Manulife - Insurer Transformation Award 2024The Digital Insurer
 
EMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWER
EMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWEREMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWER
EMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWERMadyBayot
 
Navigating the Deluge_ Dubai Floods and the Resilience of Dubai International...
Navigating the Deluge_ Dubai Floods and the Resilience of Dubai International...Navigating the Deluge_ Dubai Floods and the Resilience of Dubai International...
Navigating the Deluge_ Dubai Floods and the Resilience of Dubai International...Orbitshub
 
Emergent Methods: Multi-lingual narrative tracking in the news - real-time ex...
Emergent Methods: Multi-lingual narrative tracking in the news - real-time ex...Emergent Methods: Multi-lingual narrative tracking in the news - real-time ex...
Emergent Methods: Multi-lingual narrative tracking in the news - real-time ex...Zilliz
 
AXA XL - Insurer Innovation Award Americas 2024
AXA XL - Insurer Innovation Award Americas 2024AXA XL - Insurer Innovation Award Americas 2024
AXA XL - Insurer Innovation Award Americas 2024The Digital Insurer
 
Apidays New York 2024 - The value of a flexible API Management solution for O...
Apidays New York 2024 - The value of a flexible API Management solution for O...Apidays New York 2024 - The value of a flexible API Management solution for O...
Apidays New York 2024 - The value of a flexible API Management solution for O...apidays
 
Spring Boot vs Quarkus the ultimate battle - DevoxxUK
Spring Boot vs Quarkus the ultimate battle - DevoxxUKSpring Boot vs Quarkus the ultimate battle - DevoxxUK
Spring Boot vs Quarkus the ultimate battle - DevoxxUKJago de Vreede
 
Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot TakeoffStrategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoffsammart93
 
Cyberprint. Dark Pink Apt Group [EN].pdf
Cyberprint. Dark Pink Apt Group [EN].pdfCyberprint. Dark Pink Apt Group [EN].pdf
Cyberprint. Dark Pink Apt Group [EN].pdfOverkill Security
 
Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...
Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...
Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...Jeffrey Haguewood
 
How to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerHow to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerThousandEyes
 
MINDCTI Revenue Release Quarter One 2024
MINDCTI Revenue Release Quarter One 2024MINDCTI Revenue Release Quarter One 2024
MINDCTI Revenue Release Quarter One 2024MIND CTI
 
Exploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone ProcessorsExploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone Processorsdebabhi2
 

Último (20)

"I see eyes in my soup": How Delivery Hero implemented the safety system for ...
"I see eyes in my soup": How Delivery Hero implemented the safety system for ..."I see eyes in my soup": How Delivery Hero implemented the safety system for ...
"I see eyes in my soup": How Delivery Hero implemented the safety system for ...
 
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemkeProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
 
Why Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire businessWhy Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire business
 
DEV meet-up UiPath Document Understanding May 7 2024 Amsterdam
DEV meet-up UiPath Document Understanding May 7 2024 AmsterdamDEV meet-up UiPath Document Understanding May 7 2024 Amsterdam
DEV meet-up UiPath Document Understanding May 7 2024 Amsterdam
 
TrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
TrustArc Webinar - Unlock the Power of AI-Driven Data DiscoveryTrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
TrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
 
Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...
Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...
Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...
 
Manulife - Insurer Transformation Award 2024
Manulife - Insurer Transformation Award 2024Manulife - Insurer Transformation Award 2024
Manulife - Insurer Transformation Award 2024
 
EMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWER
EMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWEREMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWER
EMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWER
 
Navigating the Deluge_ Dubai Floods and the Resilience of Dubai International...
Navigating the Deluge_ Dubai Floods and the Resilience of Dubai International...Navigating the Deluge_ Dubai Floods and the Resilience of Dubai International...
Navigating the Deluge_ Dubai Floods and the Resilience of Dubai International...
 
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
 
Emergent Methods: Multi-lingual narrative tracking in the news - real-time ex...
Emergent Methods: Multi-lingual narrative tracking in the news - real-time ex...Emergent Methods: Multi-lingual narrative tracking in the news - real-time ex...
Emergent Methods: Multi-lingual narrative tracking in the news - real-time ex...
 
AXA XL - Insurer Innovation Award Americas 2024
AXA XL - Insurer Innovation Award Americas 2024AXA XL - Insurer Innovation Award Americas 2024
AXA XL - Insurer Innovation Award Americas 2024
 
Apidays New York 2024 - The value of a flexible API Management solution for O...
Apidays New York 2024 - The value of a flexible API Management solution for O...Apidays New York 2024 - The value of a flexible API Management solution for O...
Apidays New York 2024 - The value of a flexible API Management solution for O...
 
Spring Boot vs Quarkus the ultimate battle - DevoxxUK
Spring Boot vs Quarkus the ultimate battle - DevoxxUKSpring Boot vs Quarkus the ultimate battle - DevoxxUK
Spring Boot vs Quarkus the ultimate battle - DevoxxUK
 
Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot TakeoffStrategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
 
Cyberprint. Dark Pink Apt Group [EN].pdf
Cyberprint. Dark Pink Apt Group [EN].pdfCyberprint. Dark Pink Apt Group [EN].pdf
Cyberprint. Dark Pink Apt Group [EN].pdf
 
Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...
Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...
Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...
 
How to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerHow to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected Worker
 
MINDCTI Revenue Release Quarter One 2024
MINDCTI Revenue Release Quarter One 2024MINDCTI Revenue Release Quarter One 2024
MINDCTI Revenue Release Quarter One 2024
 
Exploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone ProcessorsExploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone Processors
 

openFrameworks 007 - graphics

  • 1. openFrameworks graphics
  • 2. Graphics • The graphics part of OF lets you draw images, lines, circles, paths etc.. • Pixel operations like crop, resize and scale. • Other types like paths, polylines, tesselator, true type fonts, bitmap fonts
  • 3. Graphics ofPixels ofImage ofBitmapFont ofGraphics ofTrueTypeFont ofPixelUtils ofPolyLine ofTesselator ofPath ofRenderCollection ofPolyUtils ofCairoRenderer
  • 4. Render to PDF ofRenderCollection ofCairoRenderer OF gives you render to PDF... out of the box! for free! Make a call to ofBeginSaveScreenAsPDF() to begin drawing to PDF and ofEndSaveScreenAsPDF() when ready. That’s it!
  • 5. Render to PDF testApp.cpp testApp.h void testApp::setup(){ class testApp : public ofBaseApp{ ofBackground(33,33,33); to_pdf = false; public: } bool to_pdf; } void testApp::draw(){ if(to_pdf) { ofBeginSaveScreenAsPDF("render.pdf"); } ofSetColor(0xFF, 0xFF, 0xFF); ofCircle(ofGetWidth()*0.5,ofGetHeight()*0.5,10); if(to_pdf) { ofEndSaveScreenAsPDF(); to_pdf = !to_pdf; } } void testApp::keyPressed(int key){ if(key == 'p') { to_pdf = !to_pdf; } }
  • 7. Image loading ofPixels ofImage ofGraphics Load images of a variety of types and draw them on screen. Resize, crop, rotate, save to file, etc.. To draw an image on screen create a ofImage member and call it’s loadImage(string file) function. In your testApp::draw(), call my_img.draw(0,0)
  • 8. Image loading void testApp::setup(){ if(!my_img.loadImage("freakday.png")) { ofLog(OF_LOG_ERROR, "Error while loading image"); } } void testApp::draw(){ my_img.draw(0,0,ofGetWidth(), ofGetHeight()); }
  • 9. Image from web You can also load images from an URL. Call the ofImage::loadImage(string url) with the address of the image. This call is synchronous so waits until the image is downloaded. void testApp::setup(){ if(!my_img.loadImage("http://www.roxlu.com/assets/downloads/freakday.png")) { ofLog(OF_LOG_ERROR, "Error while loading image"); } } void testApp::draw(){ my_img.draw(0,0, ofGetWidth(), ofGetHeight()); }
  • 10. Altering pixels ofImage and ofPixels have many functions to alter the pixels. After manipulating the pixels with one of the functions in the list below, never forget calling update() to update the pixels so they become visible. You need to call update() after using: setPixel()
  • 11. Changing pixels Use ofImage::setColor(r,g,b,a) to change the color of a pixel. Make sure to call ofImage::update() after using setColor(). To retrieve the value of a pixel use ofImage::getColor(int x, int y) for(int i = 10; i < 200; ++i) { for(int j = 10; j < 200; ++j) { my_img.setColor(i,j,ofColor(255,0,0)); } } my_img.update();
  • 12. Resizing Use ofImage::resize(int new_width, int new_height) to resize the image. if(!my_img.loadImage("http://www.roxlu.com/assets/downloads/freakday.png")) { ofLog(OF_LOG_ERROR, "Error while loading image"); } my_img.resize(100,100);
  • 13. Rotating Use ofImage::rotate90(int times) to rotate the image 90º a times number of times. no need to call update() afterwards. my_img.rotate90(0); my_img.rotate90(1); my_img.rotate90(2); my_img.rotate90(3);
  • 14. Mirroring Use ofImage::mirror(bool vertical, bool horizontal) to mirror the image. my_img.mirror(false,false); my_img.mirror(true,false); my_img.mirror(false,true); my_img.mirror(true,true);
  • 15. Cropping Use ofImage::crop(int x, int y, int w, int h) to crop the image. int s = 80; my_img.crop(s,s,my_img.width - s, my_img.height - s);
  • 16. Crop from other image Use cropFrom to get pixels from another image and store them in your img object. ofImage::cropFrom(ofImage& other,int x, int y, int w, int h) ofImage of_logo; if(!of_logo.loadImage("http://www.openframeworks.cc/wp-content/themes/ofw/images/ofw-logo.gif")) { ofLog(OF_LOG_ERROR, "Error while loading OF logo image"); } else { my_img.cropFrom(of_logo,0,0,of_logo.width,of_logo.height); }
  • 17. Saving back to disk Use ofImage::saveImage(string file) to save the image back to disk. This example writes a thumbnail to disk. Note that it handles image type conversion. if(!my_img.loadImage("http://www.roxlu.com/assets/downloads/freakday.png")) { ofLog(OF_LOG_ERROR, "Error while loading image"); } my_img.resize(100,100); my_img.saveImage("thumb.png"); my_img.saveImage("thumb.jpg"); my_img.saveImage("thumb.gif");
  • 18. Image anchor points The image anchor point is the point around which the image is drawn. Use ofImage::setAnchorPercent(float,float) or ofImage::setAnchorPoint(int, int) my_img.loadImage("freakday.png"); my_img.resize(100,100); my_img.setAnchorPercent(1,1); my_img.setAnchorPercent(0.5,0.5); my_img.draw(ofGetWidth()*0.5,ofGetHeight()*0.5);
  • 19. ofImage recap Constructors ofImage(const string& filename) ofImage(const ofPixels_<PixelType>& pix) ofImage(const ofFile& file) Texture related void allocate(int w, int h, ofImageType type) void clear() void setUseTexture(bool use) bool isUsingTexture() ofTexture& getTextureReference() void bind() void unbind()
  • 20. ofImage recap Loading bool loadImage(string filename) bool loadImage(const ofBuffer& buffer) bool loadImage(const ofFile& file) Save void saveImage(string filename, ofImageQualityType comp = OF_IMAGE_QUALITY_BEST) void saveImage(ofBuffer& buffer, ofImageQualityType comp = OF_IMAGE_QUALITY_BEST) void saveImage(const ofFile& file, ofImageQualityType comp = OF_IMAGE_QUALITY_BEST)
  • 21. ofImage recap Texture compression void setCompression(ofTexCompression compression) Get pixels ofColor_<PixelType> getColor(int x, int y) PixelType* getPixels() ofPixels_<PixelType>& getPixelsRef()
  • 22. ofImage recap Altering the image void setColor(int x, int y, ofColor_<PixelType> color) void setFromPixels(const PixelType* pixels, int w, int h, ofImageType type, bool isOrderRGB = true) void setFromPixels(const ofPixels_<PixelType>& pixels) void setImageType(ofImageType type) void resize(int w, int h) void grabScreen(int x, int y, int w, int h) void crop(int x, int y, int w, int h) void cropFrom(ofImage_<PixelType>& otherImage, int x, int y, int w, int h) void rotate90(int rotation) void mirror(bool vertical, bool horizontal)
  • 23. ofImage recap Anchor points void setAnchorPercent(float xPct, float yPct) void setAnchorPoint(float x, float y) void resetAnchor() General bool isAllocated() void reloadTexture() float getWidth() float getHeight()
  • 24. ofImage recap Image quality (some) Image formats OF_IMAGE_QUALITY_BEST OF_IMAGE_FORMAT_JPEG OF_IMAGE_QUALITY_HIGHT OF_IMAGE_FORMAT_PNG OF_IMAGE_QUALITY_MEDIUM OF_IMAGE_FORMAT_RAW OF_IMAGE_QUALITY_LOW OF_IMAGE_FORMAT_TIFF OF_IMAGE_QUALITY_WORST OF_IMAGE_FORMAT_HDR OF_IMAGE_FORMAT_TARGA Image types OF_IMAGE_FORMAT_BMP OF_IMAGE_GRAYSCALE OF_IMAGE_FORMAT_ICO OF_IMAGE_COLOR OF_IMAGE_COLOR_ALPHA For more image formats see ofImage.h OF_IMAGE_UNDEFINED
  • 25. ofPixels ofPixels Similar to ofImage, but works directly with raw pixels. Has functions like rotate, mirror, crop, pastInto etc.. See ofPixels.h for a reference of the available operations.
  • 26. ofGraphics ofGraphics ofGraphics is the part of OF which mimics the processing style of drawing functions. But besides the regular drawing functions it contains lots of general drawing related setter/getter functions.
  • 27. ofGraphics Drawing things You can draw every shape you want using the “raw” vertex functions and begin/end shape. Or use the helper functions to draw circles, lines, rectangles, ellipses and triangles. Some functions you can use: Simple shapes Custom shapes void ofTriangle(...) void ofBeginShape(...) void ofCircle(...) void ofVertex(...) float ofEllipse(...) void ofVertexes(...) float ofLine(...) void ofEndShape(...)
  • 28. ofNoFill(); ofTriangle(60,30, 200,200, 60,200); ofTriangle(60,30, 200,200, 60,200); ofCircle(170, 120, 30); ofNoFill(); ofSetCircleResolution(5); ofCircle(170, 120, 30);
  • 29. Reset state When you call a function like ofFill, ofNoFill, ofSetCircleResolution it’s called “changing the state”. This state is used as long as you change it again. So when ofSetCircleResolution(50); you called ofNoFill all things ofFill(); ofCircle(30, 35, 25); after this call will be drawn ofCircle(170, 120, 30); without a fill. ofSetCircleResolution(5); ofNoFill(); ofCircle(70, 35, 25); ofCircle(130, 120, 30);
  • 30. ofEllipse(160,120,100,50); ofEllipse(160,120,50,100); ofSetCircleResolution(6); ofNoFill(); ofEllipse(160,120,50,100); ofEllipse(160,120,50,100);
  • 31. ofLine(10,120,310,100); ofSetLineWidth(5); ofLine(10,120,310,100); ofVec2f a(10,120); ofRect(40,50,230,130); ofVec2f b(310,100); ofLine(a,b);
  • 32. Beziers and curves ofSetLineWidth(5); ofSetLineWidth(3); ofNoFill(); ofNoFill(); ofCurve( ofBezier( 10,10 10,10 ,55,15 ,55,15 ,15,210 ,15,210 ,100,200 ,100,200 ); );
  • 33. Custom shapes ofBeginShape(); ofBeginShape(); ofVertex(140,40); for(float i = 0; i < 30; ++i) { ofVertex(130,40); float r = sin(i/30 * PI) * 70; ofVertex(100,100); float x = 180 + cos((i/30)*TWO_PI) * r; ofVertex(110,100); float y = 120 + sin((i/30)*TWO_PI) * r; ofEndShape(); ofVertex(x,y); } ofEndShape();
  • 34. ofLove() ofBeginShape(); for(float i = 0; i < TWO_PI; i+= 0.01*HALF_PI*0.5) { float r = (2 - 2*sin(i) + sin(i)*sqrt(abs(cos(i))) / (sin(i)+1.4)) * -40; float x = 180 + cos(i) * r; float y = 60 + sin(i) * r; ofVertex(x,y); } ofEndShape();
  • 35. 3D Sphere ofNoFill(); ofNoFill(); ofSphere(160,120,50,50); ofSphere(160,120,50,100);
  • 36. 3D Box ofNoFill(); ofNoFill(); ofBox(160,120,10,50); ofBox(160,120,10,120);

Notas del editor

  1. \n
  2. \n
  3. \n
  4. \n
  5. \n
  6. \n
  7. \n
  8. \n
  9. \n
  10. \n
  11. \n
  12. \n
  13. \n
  14. \n
  15. \n
  16. \n
  17. \n
  18. \n
  19. \n
  20. \n
  21. \n
  22. \n
  23. \n
  24. \n
  25. \n
  26. \n
  27. \n
  28. \n
  29. \n
  30. \n
  31. \n
  32. \n
  33. \n
  34. \n
  35. \n
  36. \n
  37. \n