Hello, I seem to have run into a thing that worked fine in SDK3 and doesn't work in SDK4.
I was having a paletted bitmap, and I have drawn some background into it, and then I wanted to add text.
The bitmap is defined like this:
var bitmapOptions = {
:width => w,
:height => h,
:palette => [
// in sdk 4, we need to explicitly add transparent color to palette?
Gfx.COLOR_TRANSPARENT,
// TODO: create palette from theme
Gfx.COLOR_WHITE,
Gfx.COLOR_LT_GRAY,
Gfx.COLOR_DK_GRAY,
Gfx.COLOR_BLACK,
Gfx.COLOR_RED,
Gfx.COLOR_DK_RED,
Gfx.COLOR_BLUE,
Gfx.COLOR_DK_BLUE,
Gfx.COLOR_YELLOW,
Gfx.COLOR_ORANGE,
Gfx.COLOR_GREEN,
Gfx.COLOR_DK_GREEN
]
}
if (Graphics has :createBufferedBitmap) {
var weatherBitmapInGraphicsPool = Gfx.createBufferedBitmap(bitmapOptions);
weatherBitmap = weatherBitmapInGraphicsPool.get();
} else {
weatherBitmap = new Gfx.BufferedBitmap(bitmapOptions);
}
I then draw a text from a non-antialiased bitmap font into it:
dc.setColor(Gfx.COLOR_RED, Gfx.COLOR_TRANSPARENT); dc.drawText(x, y, font, text, Gfx.TEXT_JUSTIFY_CENTER);
In SDK 3 this has drawn a red text over the image.
In SDK 4 this draws a text on a solid black background, so the result looks really ugly.
I don't want to have a bitmap with full alpha channel, as it's rather large and barely fits to RAM, is there a way I could get back the SDK3 behavior?
I tried the new dc.setStroke(0xFFFF0000) and dc.setFill(0x00000000) methods, but they have absolutely no effect on my paletted bitmap at all:
dc.setColor(Gfx.COLOR_YELLOW, Gfx.COLOR_ORANGE); dc.setStroke(0xFFFF0000); dc.setFill(0x00000000); dc.drawText(x, y, font, text, ...);
The above code draws yellow text on orange background into my paletted bitmap.