-
Notifications
You must be signed in to change notification settings - Fork 0
Using the LCD
The library provides an LCDGraphics
class to deal with the LCD. This is a experimental but powerful feature in the library.
All the methods in LCDGraphics
should be working as expected. But the performance on Graphics rendering is really slow. If you encounter problems with the LCD, please post a issue to let me know.
If you know how to use with Graphics2D
, you are in the right way with LCDGraphics
. LCDGraphics
is just a implementation of Graphics2D
. If possible, you can even hook it to other graphics libraries (i think...)
LCD lcd = new LCD(); //Creates an ev3dev LCD instance.
LCDGraphics g = new LCDGraphics(lcd); //Creates the LCDGraphics class
//Although you are able to set colors other than BLACK and WHITE,
//the result is only BLACK and WHITE, and if there will be problems
//if color images are specified.
g.setColor(Color.BLACK);
g.drawLine(0, 0, 100, 30); //Draws a line from (0,0) to (100,30)
g.fillRect(50, 50, 25, 25); //Draws a 25x25 rectangle at (50,50)
g.drawString("Hello World, ev3dev!", 0, 100); //Draws the string at (0, 100)
g.flush(); //Applies the graphics to the LCD
The library provides a VirtualLCD
to emulate the graphics on the computer before the ev3.
VirtualLCD lcd = new VirtualLCD();
lcd.showVLCD(); //Shows an UI of the virtual LCD
LCDGraphics g = new LCDGraphics(lcd);
g.setBlackColor(); //Alternative
g.drawLine(0, 0, 100, 30); //Draws a line from (0,0) to (100,30)
g.drawRect(50, 50, 50, 50); //Draws a 50x50 rectangle at (50,50)
g.flush(); //Applies the graphics to the LCD
It should be like this:
The library also allows you to draw directly to the buffer. More details please refer to http://www.ev3dev.org/docs/tutorials/using-ev3-lcd/
LCD lcd = new LCD();
final int SCREEN_WIDTH = 178;
final int SCREEN_HEIGHT = 128;
final int LEN = 24;
final int SIZE = 3072;
byte[] arr = new byte[SIZE];
//0xff (1) = BLACK
//0x00 (0) = WHITE
//Draws a horizontal line to row 5 to the end of the screen
for (int i = 0; i < SCREEN_WIDTH; i++){
arr[5 * LEN + i] = (byte) 0xff; //Fill with BLACK
}
lcd.draw(arr);
The LCDGraphics
class is still experimental, still requires graphics performance optimizations.
- Rewrite a method to read pixels data directly, not to use
getRGB()
method, as it is so unnecessary and it lowers down the performance. (LCDGraphics.flush()
method)