diff --git a/runelite-api/src/main/java/net/runelite/api/SpritePixels.java b/runelite-api/src/main/java/net/runelite/api/SpritePixels.java index dbc3c6c3bb..49fd5fc973 100644 --- a/runelite-api/src/main/java/net/runelite/api/SpritePixels.java +++ b/runelite-api/src/main/java/net/runelite/api/SpritePixels.java @@ -24,6 +24,8 @@ */ package net.runelite.api; +import java.awt.image.BufferedImage; + public interface SpritePixels { int DEFAULT_SHADOW_COLOR = 3153952; @@ -35,4 +37,11 @@ public interface SpritePixels int getHeight(); int[] getPixels(); + + /** + * Covert the SpritePixels to a BufferedImage + * + * @return + */ + BufferedImage toBufferedImage(); } diff --git a/runelite-client/src/main/java/net/runelite/client/game/ItemManager.java b/runelite-client/src/main/java/net/runelite/client/game/ItemManager.java index a56647e911..99c7aa330f 100644 --- a/runelite-client/src/main/java/net/runelite/client/game/ItemManager.java +++ b/runelite-client/src/main/java/net/runelite/client/game/ItemManager.java @@ -148,21 +148,7 @@ public class ItemManager private BufferedImage loadImage(int itemId) { SpritePixels sprite = client.createItemSprite(itemId, 1, 1, SpritePixels.DEFAULT_SHADOW_COLOR, 0, false); - int[] pixels = sprite.getPixels(); - int[] transPixels = new int[pixels.length]; - BufferedImage img = new BufferedImage(sprite.getWidth(), sprite.getHeight(), BufferedImage.TYPE_INT_ARGB); - - for (int i = 0; i < pixels.length; i++) - { - if (pixels[i] != 0) - { - transPixels[i] = pixels[i] | 0xff000000; - } - } - - img.setRGB(0, 0, sprite.getWidth(), sprite.getHeight(), transPixels, 0, sprite.getWidth()); - - return img; + return sprite.toBufferedImage(); } /** diff --git a/runelite-mixins/src/main/java/net/runelite/mixins/RSSpritePixelsMixin.java b/runelite-mixins/src/main/java/net/runelite/mixins/RSSpritePixelsMixin.java new file mode 100644 index 0000000000..eeca0febcb --- /dev/null +++ b/runelite-mixins/src/main/java/net/runelite/mixins/RSSpritePixelsMixin.java @@ -0,0 +1,56 @@ +/* + * Copyright (c) 2016-2017, Adam + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR + * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ +package net.runelite.mixins; + +import java.awt.image.BufferedImage; +import net.runelite.api.mixins.Inject; +import net.runelite.api.mixins.Mixin; +import net.runelite.rs.api.RSSpritePixels; + +@Mixin(RSSpritePixels.class) +public abstract class RSSpritePixelsMixin implements RSSpritePixels +{ + @Inject + @Override + public BufferedImage toBufferedImage() + { + int width = getWidth(); + int height = getHeight(); + int[] pixels = getPixels(); + int[] transPixels = new int[pixels.length]; + BufferedImage img = new BufferedImage(width, height, BufferedImage.TYPE_INT_ARGB); + + for (int i = 0; i < pixels.length; i++) + { + if (pixels[i] != 0) + { + transPixels[i] = pixels[i] | 0xff000000; + } + } + + img.setRGB(0, 0, width, height, transPixels, 0, width); + return img; + } +}