mirror of
https://github.com/correl/mage.git
synced 2025-04-01 19:07:57 -09:00
Load croped image from Wizard images. fixes display issue
When resizing image to fit the BigCard panel, scale it to fit width. The result is better.
This commit is contained in:
parent
f539d9d5ec
commit
1f72804968
11 changed files with 53 additions and 46 deletions
Mage.Client
Mage.Common/src/mage/cards
Mage.Plugins/Mage.Card.Plugin/src/main/java/org/mage/plugins/card/images
|
@ -43,7 +43,7 @@
|
|||
<dependency>
|
||||
<groupId>com.mortennobel</groupId>
|
||||
<artifactId>java-image-scaling</artifactId>
|
||||
<version>0.8.4</version>
|
||||
<version>0.8.5</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>com.google.collections</groupId>
|
||||
|
|
|
@ -277,6 +277,7 @@ public class BigCard extends JComponent {
|
|||
|
||||
public void setDefaultImage() {
|
||||
bigImage = ImageHelper.getImageFromResources("/empty.png");
|
||||
// XXX: scaled to fit width
|
||||
bigImage = ImageHelper.getResizedImage((BufferedImage) bigImage, getWidth(), getHeight());
|
||||
}
|
||||
|
||||
|
|
|
@ -42,10 +42,7 @@ import mage.client.MageFrame;
|
|||
import mage.client.components.ColorPane;
|
||||
import mage.remote.Session;
|
||||
import mage.view.ChatMessage.MessageColor;
|
||||
import org.jdesktop.swingx.graphics.ColorUtilities;
|
||||
import sun.plugin2.gluegen.runtime.CPU;
|
||||
|
||||
import javax.swing.*;
|
||||
import javax.swing.border.EmptyBorder;
|
||||
import javax.swing.table.AbstractTableModel;
|
||||
|
||||
|
@ -105,7 +102,7 @@ public class ChatPanel extends javax.swing.JPanel {
|
|||
/**
|
||||
* Maps message colors to {@link Color}.
|
||||
*/
|
||||
private static final Map<MessageColor, Color> colorMap = new HashMap<MessageColor, Color>();
|
||||
private static final Map<MessageColor, Color> colorMap = new EnumMap<MessageColor, Color>(MessageColor.class);
|
||||
|
||||
static {
|
||||
colorMap.put(MessageColor.BLACK, Color.black);
|
||||
|
|
|
@ -3,20 +3,18 @@ package mage.client.components.arcane;
|
|||
import mage.client.cards.CardsStorage;
|
||||
import mage.client.constants.Constants;
|
||||
import mage.client.util.gui.BufferedImageBuilder;
|
||||
import mage.client.util.gui.ImageResizeUtil;
|
||||
import org.apache.log4j.Logger;
|
||||
|
||||
import javax.imageio.ImageIO;
|
||||
import java.awt.*;
|
||||
import java.awt.image.BufferedImage;
|
||||
import java.io.BufferedOutputStream;
|
||||
import java.io.File;
|
||||
import java.io.FileOutputStream;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.StringTokenizer;
|
||||
import java.util.regex.Pattern;
|
||||
import mage.client.util.ImageHelper;
|
||||
|
||||
public class ManaSymbols {
|
||||
private static final Logger log = Logger.getLogger(ManaSymbols.class);
|
||||
|
@ -35,7 +33,7 @@ public class ManaSymbols {
|
|||
Rectangle r = new Rectangle(11, 11);
|
||||
try {
|
||||
Image image = UI.getImageIcon(file.getAbsolutePath()).getImage();
|
||||
BufferedImage resized = ImageResizeUtil.getResizedImage(BufferedImageBuilder.bufferImage(image, BufferedImage.TYPE_INT_ARGB), r);
|
||||
BufferedImage resized = ImageHelper.getResizedImage(BufferedImageBuilder.bufferImage(image, BufferedImage.TYPE_INT_ARGB), r);
|
||||
manaImages.put(symbol, resized);
|
||||
} catch (Exception e) {
|
||||
log.error("Error for symbol:" + symbol);
|
||||
|
@ -59,7 +57,7 @@ public class ManaSymbols {
|
|||
int h = image.getHeight(null);
|
||||
if (h > 0) {
|
||||
Rectangle r = new Rectangle(21, (int) (h * 21.0f / width));
|
||||
BufferedImage resized = ImageResizeUtil.getResizedImage(BufferedImageBuilder.bufferImage(image, BufferedImage.TYPE_INT_ARGB), r);
|
||||
BufferedImage resized = ImageHelper.getResizedImage(BufferedImageBuilder.bufferImage(image, BufferedImage.TYPE_INT_ARGB), r);
|
||||
setImages.put(set, resized);
|
||||
}
|
||||
} else {
|
||||
|
@ -90,7 +88,7 @@ public class ManaSymbols {
|
|||
dx = 6;
|
||||
}
|
||||
Rectangle r = new Rectangle(15 + dx, (int) (height * (15.0f + dx) / width));
|
||||
BufferedImage resized = ImageResizeUtil.getResizedImage(BufferedImageBuilder.bufferImage(image, BufferedImage.TYPE_INT_ARGB), r);
|
||||
BufferedImage resized = ImageHelper.getResizedImage(BufferedImageBuilder.bufferImage(image, BufferedImage.TYPE_INT_ARGB), r);
|
||||
File newFile = new File(Constants.RESOURCE_PATH_SET_SMALL + File.separator + _set + "-" + code + ".png");
|
||||
ImageIO.write(resized, "png", newFile);
|
||||
}
|
||||
|
|
|
@ -28,7 +28,6 @@
|
|||
|
||||
package mage.client.deckeditor.table;
|
||||
|
||||
import mage.cards.MageCard;
|
||||
import mage.client.cards.BigCard;
|
||||
import mage.client.cards.CardEventSource;
|
||||
import mage.client.cards.ICardGrid;
|
||||
|
@ -248,8 +247,8 @@ public class TableModel extends AbstractTableModel implements ICardGrid {
|
|||
if (!card.getId().equals(bigCard.getCardId())) {
|
||||
Image image = Plugins.getInstance().getOriginalImage(card);
|
||||
if (image != null && image instanceof BufferedImage) {
|
||||
image = ImageHelper.getResizedImage((BufferedImage) image, bigCard.getWidth(),
|
||||
bigCard.getHeight());
|
||||
// XXX: scaled to fit width
|
||||
image = ImageHelper.getResizedImage((BufferedImage) image, bigCard.getWidth());
|
||||
bigCard.setCard(card.getId(), image, new ArrayList<String>(), false);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -38,22 +38,18 @@ import mage.client.MageFrame;
|
|||
import mage.client.cards.BigCard;
|
||||
import mage.client.components.HoverButton;
|
||||
import mage.client.components.MageRoundPane;
|
||||
import mage.client.components.arcane.GlowText;
|
||||
import mage.client.components.arcane.ManaSymbols;
|
||||
import mage.client.components.arcane.UI;
|
||||
import mage.client.dialog.ShowCardsDialog;
|
||||
import mage.remote.Session;
|
||||
import mage.client.util.Command;
|
||||
import mage.client.util.Config;
|
||||
import mage.client.util.ImageHelper;
|
||||
import mage.client.util.gui.BufferedImageBuilder;
|
||||
import mage.client.util.gui.ImageResizeUtil;
|
||||
import mage.components.ImagePanel;
|
||||
import mage.sets.Sets;
|
||||
import mage.view.ManaPoolView;
|
||||
import mage.view.PlayerView;
|
||||
|
||||
import javax.imageio.ImageIO;
|
||||
import javax.swing.*;
|
||||
import javax.swing.border.Border;
|
||||
import javax.swing.border.LineBorder;
|
||||
|
@ -63,7 +59,6 @@ import java.awt.event.ActionListener;
|
|||
import java.awt.image.BufferedImage;
|
||||
import java.io.FileNotFoundException;
|
||||
import java.io.IOException;
|
||||
import java.io.InputStream;
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
import java.util.Random;
|
||||
|
@ -162,7 +157,7 @@ public class PlayerPanelExt extends javax.swing.JPanel {
|
|||
Image image = ImageHelper.getImageFromResources("/avatars/face" + index + ".jpg");
|
||||
|
||||
// Avatar
|
||||
BufferedImage resized = ImageResizeUtil.getResizedImage(BufferedImageBuilder.bufferImage(image, BufferedImage.TYPE_INT_ARGB), r);
|
||||
BufferedImage resized = ImageHelper.getResizedImage(BufferedImageBuilder.bufferImage(image, BufferedImage.TYPE_INT_ARGB), r);
|
||||
avatar = new HoverButton("player", resized, resized, resized, r);
|
||||
avatar.setBounds(6, 6, r.width, r.height);
|
||||
panelBackground.add(avatar);
|
||||
|
@ -219,7 +214,7 @@ public class PlayerPanelExt extends javax.swing.JPanel {
|
|||
// Cheat button
|
||||
r = new Rectangle(25, 21);
|
||||
image = ImageHelper.getImageFromResources("/info/cheat.png");
|
||||
resized = ImageResizeUtil.getResizedImage(BufferedImageBuilder.bufferImage(image, BufferedImage.TYPE_INT_ARGB), r);
|
||||
resized = ImageHelper.getResizedImage(BufferedImageBuilder.bufferImage(image, BufferedImage.TYPE_INT_ARGB), r);
|
||||
cheat = new JButton();
|
||||
cheat.setIcon(new ImageIcon(resized));
|
||||
panelBackground.add(cheat);
|
||||
|
@ -273,7 +268,7 @@ public class PlayerPanelExt extends javax.swing.JPanel {
|
|||
}
|
||||
|
||||
Image image = ImageHelper.getImageFromResources(imagePath);
|
||||
BufferedImage resized = ImageResizeUtil.getResizedImage(BufferedImageBuilder.bufferImage(image, BufferedImage.TYPE_INT_ARGB), r);
|
||||
BufferedImage resized = ImageHelper.getResizedImage(BufferedImageBuilder.bufferImage(image, BufferedImage.TYPE_INT_ARGB), r);
|
||||
JComponent component = null;
|
||||
if (isButton) {
|
||||
component = new HoverButton(null, resized, resized, resized, r);
|
||||
|
|
|
@ -1,10 +1,8 @@
|
|||
package mage.client.plugins.adapters;
|
||||
|
||||
import java.awt.*;
|
||||
import java.awt.event.MouseAdapter;
|
||||
import java.awt.event.MouseEvent;
|
||||
import java.awt.image.BufferedImage;
|
||||
import java.io.InterruptedIOException;
|
||||
import java.util.List;
|
||||
import java.util.UUID;
|
||||
|
||||
|
@ -18,7 +16,6 @@ import mage.cards.action.TransferData;
|
|||
import mage.client.MageFrame;
|
||||
import mage.client.cards.BigCard;
|
||||
import mage.client.components.MageComponents;
|
||||
import mage.client.components.MageRoundPane;
|
||||
import mage.client.game.PlayAreaPanel;
|
||||
import mage.client.plugins.impl.Plugins;
|
||||
import mage.remote.Session;
|
||||
|
@ -197,7 +194,8 @@ public class MageActionCallback implements ActionCallback {
|
|||
state = true;
|
||||
Image image = card.getImage();
|
||||
if (image != null && image instanceof BufferedImage) {
|
||||
image = ImageHelper.getResizedImage((BufferedImage) image, bigCard.getWidth(), bigCard.getHeight());
|
||||
// XXX: scaled to fit width
|
||||
image = ImageHelper.getResizedImage((BufferedImage) image, bigCard.getWidth());
|
||||
bigCard.setCard(card.getOriginal().getId(), image, card.getOriginal().getRules(), card.isFoil());
|
||||
if (card.getOriginal().isAbility()) {
|
||||
bigCard.showTextComponent();
|
||||
|
|
|
@ -49,6 +49,7 @@ import mage.client.components.arcane.UI;
|
|||
import mage.view.CardView;
|
||||
|
||||
import com.mortennobel.imagescaling.ResampleOp;
|
||||
import java.awt.Rectangle;
|
||||
|
||||
/**
|
||||
*
|
||||
|
@ -168,6 +169,29 @@ public class ImageHelper {
|
|||
return image;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns an image scaled to fit width
|
||||
* panel
|
||||
*/
|
||||
public static BufferedImage getResizedImage(BufferedImage original, int width) {
|
||||
if (width != original.getWidth()) {
|
||||
double ratio = width / (double) original.getWidth();
|
||||
int height = (int) (original.getHeight() * ratio);
|
||||
return getResizedImage(original, width, height);
|
||||
} else {
|
||||
return original;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns an image scaled to the needed size
|
||||
*/
|
||||
public static BufferedImage getResizedImage(BufferedImage original, Rectangle sizeNeed) {
|
||||
ResampleOp resampleOp = new ResampleOp(sizeNeed.width, sizeNeed.height);
|
||||
BufferedImage image = resampleOp.filter(original, null);
|
||||
return image;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get image using relative path in resources.
|
||||
* @param path
|
||||
|
|
|
@ -1,18 +0,0 @@
|
|||
package mage.client.util.gui;
|
||||
|
||||
import com.mortennobel.imagescaling.ResampleOp;
|
||||
|
||||
import java.awt.*;
|
||||
import java.awt.image.BufferedImage;
|
||||
|
||||
/**
|
||||
* @author nantuko
|
||||
*/
|
||||
public class ImageResizeUtil {
|
||||
|
||||
public static BufferedImage getResizedImage(BufferedImage original, Rectangle sizeNeed) {
|
||||
ResampleOp resampleOp = new ResampleOp(sizeNeed.width, sizeNeed.height);
|
||||
BufferedImage image = resampleOp.filter(original, null);
|
||||
return image;
|
||||
}
|
||||
}
|
|
@ -5,7 +5,6 @@ import java.awt.Image;
|
|||
import javax.swing.JPanel;
|
||||
|
||||
import mage.view.CardView;
|
||||
import mage.view.PermanentView;
|
||||
|
||||
public abstract class MageCard extends JPanel {
|
||||
private static final long serialVersionUID = 6089945326434301879L;
|
||||
|
|
|
@ -19,6 +19,7 @@ import com.google.common.base.Function;
|
|||
import com.google.common.collect.ComputationException;
|
||||
import com.google.common.collect.MapMaker;
|
||||
import com.mortennobel.imagescaling.ResampleOp;
|
||||
import java.awt.Graphics2D;
|
||||
|
||||
/**
|
||||
* This class stores ALL card images in a cache with soft values. this means
|
||||
|
@ -80,12 +81,13 @@ public class ImageCache {
|
|||
return loadImage(thumbnailFile);
|
||||
} else {
|
||||
BufferedImage image = loadImage(file);
|
||||
image = getWizardsCard(image);
|
||||
if (image == null) return null;
|
||||
//log.debug("creating thumbnail for " + key);
|
||||
return makeThumbnail(image, thumbnailPath);
|
||||
}
|
||||
} else {
|
||||
return loadImage(file);
|
||||
return getWizardsCard(loadImage(file));
|
||||
}
|
||||
} else {
|
||||
throw new RuntimeException(
|
||||
|
@ -101,6 +103,18 @@ public class ImageCache {
|
|||
});
|
||||
}
|
||||
|
||||
public static BufferedImage getWizardsCard(BufferedImage image) {
|
||||
if (image.getWidth() == 265 && image.getHeight() == 370) {
|
||||
BufferedImage crop = new BufferedImage(256, 360, BufferedImage.TYPE_INT_RGB);
|
||||
Graphics2D graphics2D = crop.createGraphics();
|
||||
graphics2D.drawImage(image, 0, 0, 255, 360, 5, 5, 261, 365, null);
|
||||
graphics2D.dispose();
|
||||
return crop;
|
||||
} else {
|
||||
return image;
|
||||
}
|
||||
}
|
||||
|
||||
public static BufferedImage getThumbnail(CardView card) {
|
||||
String key = getKey(card) + "#thumb";
|
||||
//log.debug("#key: " + key);
|
||||
|
|
Loading…
Add table
Reference in a new issue