~jd-team/jdownloader/appwork-utils

« back to all changes in this revision

Viewing changes to src/org/appwork/utils/images/IconIO.java

  • Committer: daniel
  • Date: 2019-05-15 09:30:21 UTC
  • Revision ID: svn-v4:21714237-3853-44ef-a1f0-ef8f03a7d1fe::3286

Show diffs side-by-side

added added

removed removed

Lines of Context:
59
59
import java.awt.image.ImageProducer;
60
60
import java.awt.image.Kernel;
61
61
import java.awt.image.RGBImageFilter;
62
 
import java.io.ByteArrayInputStream;
63
62
import java.io.ByteArrayOutputStream;
64
63
import java.io.IOException;
65
64
import java.io.InputStream;
66
65
import java.net.URL;
 
66
import java.nio.CharBuffer;
 
67
import java.nio.charset.Charset;
67
68
import java.util.HashMap;
68
69
 
69
70
import javax.imageio.ImageIO;
79
80
import org.appwork.utils.ImageProvider.ImageProvider;
80
81
import org.appwork.utils.net.Base64InputStream;
81
82
import org.appwork.utils.net.Base64OutputStream;
 
83
import org.appwork.utils.net.CharSequenceInputStream;
82
84
 
83
85
public class IconIO {
84
86
    public static class ScaledIcon implements Icon, IDIcon {
187
189
            @Override
188
190
            public final int filterRGB(final int x, final int y, final int rgb) {
189
191
                final int r = (rgb & 0xFF0000) >> 16;
190
 
                final int g = (rgb & 0xFF00) >> 8;
191
 
                final int b = rgb & 0xFF;
192
 
                if (r >= r1 && r <= r2 && g >= g1 && g <= g2 && b >= b1 && b <= b2) {
193
 
                    // Set fully transparent but keep color
194
 
                    // calculate a alpha value based on the distance between the
195
 
                    // range borders and the pixel color
196
 
                    final int dist = (Math.abs(r - (r1 + r2) / 2) + Math.abs(g - (g1 + g2) / 2) + Math.abs(b - (b1 + b2) / 2)) * 2;
197
 
                    return new Color(r, g, b, Math.min(255, dist)).getRGB();
198
 
                }
199
 
                return rgb;
 
192
        final int g = (rgb & 0xFF00) >> 8;
 
193
        final int b = rgb & 0xFF;
 
194
        if (r >= r1 && r <= r2 && g >= g1 && g <= g2 && b >= b1 && b <= b2) {
 
195
            // Set fully transparent but keep color
 
196
            // calculate a alpha value based on the distance between the
 
197
            // range borders and the pixel color
 
198
            final int dist = (Math.abs(r - (r1 + r2) / 2) + Math.abs(g - (g1 + g2) / 2) + Math.abs(b - (b1 + b2) / 2)) * 2;
 
199
            return new Color(r, g, b, Math.min(255, dist)).getRGB();
 
200
        }
 
201
        return rgb;
200
202
            }
201
203
        };
202
204
        final ImageProducer ip = new FilteredImageSource(image.getSource(), filter);
884
886
     */
885
887
    public static Image getImageFromDataUrl(String dataURL) throws IOException {
886
888
        final int base64Index = dataURL.indexOf(";base64,");
 
889
        final CharBuffer cb;
887
890
        if (base64Index > 0 && base64Index + 8 < dataURL.length()) {
888
 
            dataURL = dataURL.substring(base64Index + 8);
 
891
            cb = CharBuffer.wrap(dataURL, base64Index + 8, dataURL.length());
 
892
        } else {
 
893
            cb = CharBuffer.wrap(dataURL);
889
894
        }
890
 
        final Base64InputStream is = new Base64InputStream(new ByteArrayInputStream(dataURL.getBytes("UTF-8")));
 
895
        final Base64InputStream is = new Base64InputStream(new CharSequenceInputStream(cb, Charset.forName("UTF-8")));
891
896
        return ImageIO.read(is);
892
897
    }
893
898
}