Skip to content

Commit 963f94b

Browse files
committed
Improve black fill quality
1 parent 3927204 commit 963f94b

File tree

1 file changed

+28
-12
lines changed

1 file changed

+28
-12
lines changed

app/src/main/java/eu/chainfire/holeylight/animation/SpriteSheet.java

Lines changed: 28 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -52,25 +52,32 @@ private static Bitmap superimposedFrame(LottieComposition lottieComposition) {
5252
}
5353

5454
private static Bitmap blackFrame(Bitmap superimposedFrame) {
55-
int[] pixels = new int[superimposedFrame.getWidth() * superimposedFrame.getHeight()];
56-
int[] pixelsBlack = new int[superimposedFrame.getWidth() * superimposedFrame.getHeight()];
55+
Bitmap bigFrame = Bitmap.createBitmap(superimposedFrame.getWidth() * 4, superimposedFrame.getHeight() * 4, Bitmap.Config.ARGB_8888);
56+
Canvas bigCanvas = new Canvas(bigFrame);
5757

58-
Bitmap frame = Bitmap.createBitmap(superimposedFrame.getWidth(), superimposedFrame.getHeight(), Bitmap.Config.ARGB_8888);
58+
Paint paint = new Paint();
59+
paint.setFilterBitmap(true);
60+
paint.setDither(true);
61+
paint.setAntiAlias(true);
62+
bigCanvas.drawBitmap(superimposedFrame, new Rect(0, 0, superimposedFrame.getWidth(), superimposedFrame.getHeight()), new Rect(0, 0, bigFrame.getWidth(), bigFrame.getHeight()), paint);
63+
64+
int[] pixels = new int[bigFrame.getWidth() * bigFrame.getHeight()];
65+
int[] pixelsBlack = new int[bigFrame.getWidth() * bigFrame.getHeight()];
5966

60-
superimposedFrame.getPixels(pixels, 0, superimposedFrame.getWidth(), 0, 0, superimposedFrame.getWidth(), superimposedFrame.getHeight());
61-
for (int y = 0; y < superimposedFrame.getHeight(); y++) {
67+
bigFrame.getPixels(pixels, 0, bigFrame.getWidth(), 0, 0, bigFrame.getWidth(), bigFrame.getHeight());
68+
for (int y = 0; y < bigFrame.getHeight(); y++) {
6269
int last = 0;
6370
boolean inside = false;
6471
int start = -1;
6572
int end = -1;
6673

67-
int index = y * superimposedFrame.getWidth();
68-
for (int x = 0; x < superimposedFrame.getWidth(); x++) {
74+
int index = y * bigFrame.getWidth();
75+
for (int x = 0; x < bigFrame.getWidth(); x++) {
6976
int p = pixels[index];
70-
if ((p == 0) && (last != 0)) {
77+
if ((p != 0xFFFFFFFF) && (last == 0xFFFFFFFF)) {
7178
start = x;
7279
inside = true;
73-
} else if (inside && (p != 0) && (last == 0)) {
80+
} else if (inside && (p == 0xFFFFFFFF) && (last != 0xFFFFFFFF)) {
7481
end = x;
7582
break;
7683
}
@@ -79,15 +86,24 @@ private static Bitmap blackFrame(Bitmap superimposedFrame) {
7986
}
8087

8188
if ((start >= 0) && (end >= 0) && (end >= start)) {
82-
index = y * superimposedFrame.getWidth();
89+
index = y * bigFrame.getWidth();
8390
for (int x = start; x < end; x++) {
8491
pixelsBlack[index + x] = (int)0xFF000000;
8592
}
8693
}
8794
}
88-
frame.setPixels(pixelsBlack, 0, superimposedFrame.getWidth(), 0, 0, superimposedFrame.getWidth(), superimposedFrame.getHeight());
8995

90-
return frame;
96+
Bitmap bigBlackFrame = Bitmap.createBitmap(bigFrame.getWidth(), bigFrame.getHeight(), Bitmap.Config.ARGB_8888);
97+
bigBlackFrame.setPixels(pixelsBlack, 0, bigFrame.getWidth(), 0, 0, bigFrame.getWidth(), bigFrame.getHeight());
98+
99+
Bitmap blackFrame = Bitmap.createBitmap(superimposedFrame.getWidth(), superimposedFrame.getHeight(), Bitmap.Config.ARGB_8888);
100+
Canvas blackCanvas = new Canvas(blackFrame);
101+
blackCanvas.drawBitmap(bigBlackFrame, new Rect(0, 0, bigBlackFrame.getWidth(), bigBlackFrame.getHeight()), new Rect(0, 0, blackFrame.getWidth(), blackFrame.getHeight()), paint);
102+
103+
bigFrame.recycle();
104+
bigBlackFrame.recycle();
105+
106+
return blackFrame;
91107
}
92108

93109
public static SpriteSheet fromLottieComposition(LottieComposition lottieComposition, int width, int height, SpritePlayer.Mode mode) {

0 commit comments

Comments
 (0)