Estou tendo problemas em salvar uma imagem que está armazenada em um tipo image, já tentei armazenar em bufferedImage e depois escrever em arquivo, o arquivo foi até criado, mas não consigo visualizar a imagem original , segue abaixo uma das tentativas que executei, se eu passar o inputFile como parametro o código funciona perfeitamente, mas o que estou precisando é passar o image1, para que possa ser feita a gravação dessa imagem em um arquivo.Já dei uma olhada em ImageInputStream, BufferedImage, ByteInputStream, mas ainda não encontrei o caminho.
try{/**Imageimage1=Toolkit.getDefaultToolkit().getImage("C:/Atila/Testes ImageGear/sax.jpg");***/FileinputFile=newFile("C:/Atila/Testes/sax.jpg");FileoutputFile=newFile("C:/Atila/Testes/imageTeste.jpg");System.out.println("Gravando o arquivo.....");BufferedImageinput=ImageIO.read(inputFile);ImageIO.write(input, "JPG", outputFile);}catch (Exception e) {e.printStackTrace();}System.out.println("Arquivo Gravado com sucesso!!!");}// fim do construtor
rsrs, eu fiquei uma semana tentando fazer isso, mas uma boa pesquisada no google e eu encontrei isso. Foi tiro e queda!!! Funcionou uma maravilha.
Esse é um jeito (o melhor que eu achei)
BufferedImagebuffer=newBufferedImage(image2.getWidth(null),image2.getHeight(null),BufferedImage.TYPE_INT_RGB);Graphicsg=buffer.createGraphics();g.drawImage(image2,0,0,null);g.dispose();ImageIO.write(buffer,"JPG",file);// grava a imagem em um arquivo especificado
Esse é outro jeito
publicstaticBufferedImagetoBufferedImage(Image imageB) {// funcao que transforma o componente Image em BufferedImage if(imageB instanceof BufferedImage) { return(BufferedImage)imageB;}returnnull;}
C
carlos_atilaPJ
Ax, blza cara, obrigado pela resposta , mas eu já havia tentando estas duas alternativas que vc me passou, o arquivo é criado , mas quando eu abro o arquivo, só é exibida uma tela preta, onde era pra eu estar visualizando a imagem origem. Vc conseguiu fazer desta forma?, pode postar o código aqui, para que eu possa ver o que eu estou deixando de fazer ?
Valeu!!!
A
axPJ
Esses são os códigos da minha aplicação e deu tudo certinho!!! Os dois jeitos funcionaram direitinho aqui. O segundo jeito é a mesma coisa: transformo imagem em BufferedImage e depois usei o ImageIO.write para salva em um arquivo.
Eu acho que vc tem que verificar se a imagem está sendo carregada realmente, pois ela pode estar com valor nulo. Tenta colocar essa imagem em um label para ver se ela está sendo realmente carregada para a variável e depois salva-la no arquivo.
C
carlos_atilaPJ
Cara,a imagem não está nula , pois eu a exibo em um panel tranquilamente, quando eu tentp utilizar , O buffered pelo método que vc é lnaçada uma exceção de ClassCastException, e quando utilizo a outra forma que vc enviou ocorre a situação que já informei, que é , o arquivo é gravado mas fica uma tela preta…
Agradeço pelas respostas , mas ainda não consegui resolver… Continuarei tentando por aqui…
Valeu!!!
C
carlos_atilaPJ
Ax, Valeu mesmo pela força, mas eu já consegui, segue abaixo o código:
publicclassConstrutorConstrutor(){try{Imageimage1=Toolkit.getDefaultToolkit().getImage("C:/Atila/Testes ImageGear/sax.jpg");BufferedImageinput=toBufferedImage(image);ImageIO.write(input, "JPG", outputFile);}catch(Exception e){e.printStackTrace();}}publicstaticvoidmain(String args[]) {Construtorconstrutor=newConstrutor();}//ThismethodreturnsabufferedimagewiththecontentsofanimagepublicstaticBufferedImagetoBufferedImage(Image image) {if(image instanceof BufferedImage) {return(BufferedImage)image;}//Thiscodeensuresthatallthepixelsintheimageareloadedimage=newImageIcon(image).getImage();//Determineiftheimagehastransparentpixels;forthismethod's//implementation,seee661DeterminingIfanImageHasTransparentPixelsbooleanhasAlpha=hasAlpha(image);//Createabufferedimagewithaformatthat's compatible with the screenBufferedImagebimage=null;GraphicsEnvironmentge=GraphicsEnvironment.getLocalGraphicsEnvironment();try{//Determinethetypeoftransparencyofthenewbufferedimageinttransparency=Transparency.OPAQUE;if(hasAlpha) {transparency=Transparency.BITMASK;}//CreatethebufferedimageGraphicsDevicegs=ge.getDefaultScreenDevice();GraphicsConfigurationgc=gs.getDefaultConfiguration();bimage=gc.createCompatibleImage(image.getWidth(null), image.getHeight(null), transparency);} catch (HeadlessException e) {//Thesystemdoesnothaveascreen}if(bimage == null) {//Createabufferedimageusingthedefaultcolormodelinttype=BufferedImage.TYPE_INT_RGB;if(hasAlpha) {type=BufferedImage.TYPE_INT_ARGB;}bimage=newBufferedImage(image.getWidth(null), image.getHeight(null), type);}//CopyimagetobufferedimageGraphicsg=bimage.createGraphics();//Painttheimageontothebufferedimageg.drawImage(image, 0, 0, null);g.dispose();returnbimage;} publicstaticbooleanhasAlpha(Image image) {//Ifbufferedimage,thecolormodelisreadilyavailableif(image instanceof BufferedImage) {BufferedImagebimage=(BufferedImage)image;returnbimage.getColorModel().hasAlpha();}//Useapixelgrabbertoretrievetheimage's color model;//grabbingasinglepixelisusuallysufficientPixelGrabberpg=newPixelGrabber(image, 0, 0, 1, 1, false);try{pg.grabPixels();} catch (InterruptedException e) {}//Gettheimage's color modelColorModelcm=pg.getColorModel();returncm.hasAlpha();}}//fim da classe
Valeu !!!!!!!
A
axPJ
Nossa, isso foi muito estranho. E esse código gigante eu não entendi quase nada dele, mas isso depois eu dou olhada com mais atenção.
Só queria saber qual a versão do Java que você está usando?
Mas por via das dúvidas eu guardar esse seu código, rsrs.