java.awt.Image je docela jednoduše. Neposkytuje žádné prostředky, kterými lze obrázek zapisovat/ukládat, ani neposkytuje žádné prostředky pro získání přístupu k podkladovým pixelovým datům obrázku.
Prvním krokem je převod java.awt.Image na něco, co ImageIO může podporovat. To vám umožní vypsat obrazová data...
ImageIO vyžaduje RenderedImage jako primární zdroj obrazu. BufferedImage je jedinou implementací tohoto rozhraní v rámci výchozích knihoven...
Bohužel neexistuje žádná jednoduchá metoda pro převod z jednoho na druhý. Naštěstí to není příliš těžké.
Image img = ...;
BufferedImage bi = new BufferedImage(img.getWidth(null), img.getHeight(null), BufferedImage.TYPE_INT_ARGB);
Graphics2D g2d = bi.createGraphics();
g2d.drawImage(img, 0, 0, null);
g2d.dispose();
V podstatě to jen vykreslí původní java.awt.Image na BufferedImage
Dále musíme obrázek nějakým způsobem uložit, aby mohl vytvářet InputStream ...
To je o něco méně než optimální, ale funguje to.
ByteArrayOutputStream baos = null;
try {
baos = new ByteArrayOutputStream();
ImageIO.write(bi, "png", baos);
} finally {
try {
baos.close();
} catch (Exception e) {
}
}
ByteArrayInputStream bais = new ByteArrayInputStream(baos.toByteArray());
V podstatě zapíšeme obrázek do ByteArrayOutputStream a výsledek použijte ke generování ByteArrayInputStream
Nyní. Pokud je problém s pamětí nebo je obrázek poměrně velký, můžete obrázek nejprve zapsat do File a pak si jednoduše přečtěte File zpět přes nějaký druh InputStream místo toho...
Nakonec nastavíme InputStream do požadovaného sloupce...
PreparedStatement stmt = null;
//...
stmt.setBlob(parameterIndex, bais);
A Blob je tvůj strýc...