-
• #2
That's as good as it's going to get with a 3-bit display, meaning you have only 8 colours to work with. Any other colours are created by dithering. You can see an example of the palette here:
http://forum.espruino.com/comments/16223395/I think it looks great though.
Edit: the wave clock is just using the available colours properly, which prevents dithering from occurring.
-
• #3
On Bangle 2 you have a limited color palette of eight colors/3bit RGB. If they are not met, the colors are dithered. Just try to hit the 3bit RGB palette and everything is fine.
-
• #4
Thank you!
Does anyone know the exact hex codes for these allowed colors?
I could build some pixel stuff around it and make it look more crisp
-
• #5
Nevermind, I think I found it! https://lospec.com/palette-list/3-bit-rgb
Will try to create a nice Nyan cat with these constrains and let's see where this goes
Thank you again!
-
• #6
https://lospec.com/palette-list/3-bit-rgb
in code: g.setColor(r,g,b);
r,g, b = 0| 1(ok, I was too slow ...)
-
• #7
Wow that looks great. Cant wait to try that out. Love it.
-
• #8
Out of curiosity, what are the other two watches?
-
• #9
They look like Pebbles. The watch company that Fitbit bought to take out the competition.
-
• #10
Thanks. Was vaguely aware of pebbles for a long time but not enough to recognise them. Only became interested in watches at all recently when I started doing exercise.
-
• #11
Pebble Time Round and Pebble Time.
-
• #12
Updates in the process of making it look crisper, I re did the pixel art of the Nyan cat using mostly the colors allowed in the screen and allowing some others to be dithered and it looks so much better ๐๐
Thank you all so much for your help
Will package it today and make an PR to add it to the bangle app list
1 Attachment
-
• #13
@user137493 Looks great!
-
• #14
I am done with the adjustments to it and uploaded it to GitHub, unfortunately, I nyan cat is actually copyrighted so I can't share it as MIT, will just share it in the forum :/
Here is the code in the IDE:
https://www.espruino.com/ide/?codeurl=https://raw.githack.com/SaraVieira/BangleApps/master/apps/nyancatclk/app.jsAnd the Github Repo:
https://github.com/SaraVieira/BangleApps/tree/master/apps/nyancatclkSuper happy with you it came out!
-
• #15
That looks awesome! Such a shame about the copyright though.
I've sent them an email, and maybe they'll say 'yes it's fine' - it's not like there aren't hundreds of clones out there already and you're not making any money out of it.
-
• #16
Oh thank you! Let me know what they say :)
Would love to share it :)
-
• #17
I just found this thread because I had problems with the few supported colors myself...
For those interested: here is a short program displaying the supported colors
let ScreenWidth = g.getWidth(); let BarStart = ScreenWidth/2, BarEnd = ScreenWidth-5; let BarHeight = 20; g.clear(); let ColorNames = 'black blue green cyan red magenta yellow white'.split(' '); let ColorValues = '#000000 [#0000FF](https://forum.espruino.com/search/?q=%230000FF) [#00FF00](https://forum.espruino.com/search/?q=%2300FF00) [#00FFFF](https://forum.espruino.com/search/?q=%2300FFFF) [#FF0000](https://forum.espruino.com/search/?q=%23FF0000) [#FF00FF](https://forum.espruino.com/search/?q=%23FF00FF) [#FFFF00](https://forum.espruino.com/search/?q=%23FFFF00) [#FFFFFF](https://forum.espruino.com/search/?q=%23FFFFFF)'.split(' '); g.setFont12x20(); for (let i = 0; i < 8; i++) { let y = 20*i+5; g.setColor('#000000'); g.drawString(ColorNames[i], 5,y); g.setColor(ColorValues[i]); g.fillRect(BarStart,y, BarEnd,y+BarHeight); }
Edit: oops - the final Markdown renderer seems to completely misunderstand my color codes (and try to render them as links) - the "Preview" is still working!
@Gordon you should have a look into the forum's code or ask the maintainers to fix that bug
1 Attachment
-
• #18
For those interested: when it comes to the upload of an existing image, the converter built into the Web IDE's "Device Storage" manager does a remarkably good job (given the constraints it is suffering from)
1 Attachment
-
• #19
...and here comes the inevitable "Lena": flat gradients seem to cause problems, but detailed areas come out quite well
1 Attachment
-
• #20
Maybe it's obviousโI got acceptable results using things like #FF8000 for orange (full red, half yellow). I'm not a fan of 3-bit colour, certainly in comparison with Bangle.js 1. Fortunately, I'm not drawing detailed pictures, and the number of users of my app won't likely exceed 10โin binary.
-
• #21
What a great idea! Perhaps, I should start writing down the number of my users as binary numbers as well...
-
• #22
Based on the idea with "half colors", I wrote the following little test
let ScreenWidth = g.getWidth(), PatchWidth = ScreenWidth/6; let ScreenHeight = g.getHeight(), PatchHeight = ScreenHeight/6; g.clear(); for (let i = 0; i < 27; i++) { let x = (i % 6) * PatchWidth; let y = Math.floor(i/6) * PatchHeight; let R = i % 3; let G = Math.floor(i/3) % 3; let B = Math.floor(i/9); g.setColor(R/2,G/2,B/2); g.fillRect(x,y, x+PatchWidth-1,y+PatchHeight-1); }
The result does not look too bad (if you can live with half of the original spatial resolution)
1 Attachment
-
• #23
And just for the records: here is the same experiment for "quarter colors", i.e. RGB channel values 0, 0.25, 0.5, 0.75 and 1.0:
let ScreenWidth = g.getWidth(), PatchWidth = ScreenWidth/12; let ScreenHeight = g.getHeight(), PatchHeight = ScreenHeight/12; g.clear(); for (let i = 0; i < 125; i++) { let x = (i % 12) * PatchWidth; let y = Math.floor(i/12) * PatchHeight; let R = i % 5; let G = Math.floor(i/5) % 5; let B = Math.floor(i/25); g.setColor(R/4,G/4,B/4); g.fillRect(x,y, x+PatchWidth-1,y+PatchHeight-1); }
It seems that channel values 0/0.5/1.0 still look acceptable while quarter values do not...
1 Attachment
-
• #24
Nice one @Andreas_Rozek. It would make a useful app to have those colours on a screen, touch the screen and show the colour code in '#f8f' format.
-
• #25
Well,
try this one for the moment:
let ScreenWidth = g.getWidth(), PatchWidth = ScreenWidth/6; let ScreenHeight = g.getHeight(), PatchHeight = ScreenHeight/6; g.clear(); for (let i = 0; i < 27; i++) { let x = (i % 6) * PatchWidth; let y = Math.floor(i/6) * PatchHeight; let R = i % 3; let G = Math.floor(i/3) % 3; let B = Math.floor(i/9); g.setColor(R/2,G/2,B/2); g.fillRect(x,y, x+PatchWidth-1,y+PatchHeight-1); } g.setFont12x20(); Bangle.on('touch', function (Button,Position) { let x = Math.floor(Position.x / PatchWidth); let y = Math.floor(Position.y / PatchHeight); let i = y*6 + x; if (i >= 27) { return; } let R = i % 3; let G = Math.floor(i/3) % 3; let B = Math.floor(i/9); let HexValues = ['00','80','FF']; g.setColor(1,1,1); g.fillRect(3*PatchWidth,4*PatchHeight, ScreenWidth,ScreenHeight); g.setColor(0,0,0); g.drawString( '#' + HexValues[R] + HexValues[G] + HexValues[B], 3*PatchWidth,4*PatchHeight+6 ); });
I'll make a "real" application out of it as soon as I find the time (it's Christmas right now, you know...time for the family)
๐
Got my banglejs 2 in the mail a couple of days ago, so far it's working great and I love it.
Been trying to create some watch faces and I always seem to come with problems when it comes to sharpness of colors and I think it's mostly because I don't understand how it works under the hood and what colors are supported so they don't dither.
I would like to understand why the Wave clock for example looks so crisp but when I try to upload an image it just looks super dithered
Would appreciate any help when it comes to understanding how I can have images within the constrains of the LCD
I was trying to reproduce the watchface I used to have on the pebble
First image is the bangle and the other two the watch face I am trying to reproduce
Thank you
2 Attachments