2013-10-20 100 views
1

我需要一些关于从数据库加载图像的帮助。如何从数据库中检索图像并将其放入Image/ImageView中?JAVAFX:从数据库加载图像

非常感谢!

+0

[你有什么尝试?](http://www.whathaveyoutried.com/)我的意思是*除*问我们。 –

+0

@AndrewThompson这是'JavaFX'而不是Swing! ;-) –

+0

我知道。幸运的是,它不需要Java-FX的知识即可发现OP已投入/显示任何努力的问题;) –

回答

0
import java.nio.ByteBuffer; 
import javafx.application.Application; 
import javafx.scene.Group; 
import javafx.scene.Scene; 
import javafx.scene.canvas.Canvas; 
import javafx.scene.canvas.GraphicsContext; 
import javafx.scene.effect.DropShadow; 
import javafx.scene.image.PixelFormat; 
import javafx.scene.image.PixelWriter; 
import javafx.scene.paint.Color; 
import javafx.stage.Stage; 

public class ImageOpsTest extends Application { 

    // Image Data 
    private static final int IMAGE_WIDTH = 10; 
    private static final int IMAGE_HEIGHT = 10; 
    private byte imageData[] = 
     new byte[IMAGE_WIDTH * IMAGE_HEIGHT * 3]; 

    // Drawing Surface (Canvas) 
    private GraphicsContext gc; 
    private Canvas canvas; 
    private Group root; 

    public static void main(String[] args) { 
     launch(args); 
    } 

    @Override 
    public void start(Stage primaryStage) { 
     primaryStage.setTitle("PixelWriter Test"); 
     root = new Group(); 
     canvas = new Canvas(200, 200); 
     canvas.setTranslateX(100); 
     canvas.setTranslateY(100); 
     gc = canvas.getGraphicsContext2D(); 
     createImageData(); 
     drawImageData(); 
     primaryStage.setScene(new Scene(root, 400, 400)); 
     primaryStage.show(); 

    } 

    private void createImageData() { 
     int i = 0; 
     for (int y = 0; y < IMAGE_HEIGHT; y++) { 
      int r = y * 255/IMAGE_HEIGHT; 
      for (int x = 0; x < IMAGE_WIDTH; x++) { 
       int g = x * 255/IMAGE_WIDTH; 
       imageData[i] = (byte) r; 
       imageData[i + 1] = (byte) g; 
       i += 3; 
      } 
     } 
    } 

    private void drawImageData() { 
     boolean on = true; 
     PixelWriter pixelWriter = gc.getPixelWriter(); 
     PixelFormat<ByteBuffer> pixelFormat = PixelFormat.getByteRgbInstance(); 
     for (int y = 50; y < 150; y += IMAGE_HEIGHT) { 
      for (int x = 50; x < 150; x += IMAGE_WIDTH) { 
       if (on) { 
        pixelWriter.setPixels(x, y, IMAGE_WIDTH, 
          IMAGE_HEIGHT, pixelFormat, imageData, 
          0, IMAGE_WIDTH * 3); 
       } 
       on = !on; 
      } 
      on = !on; 
     } 

     // Add drop shadow effect 
     gc.applyEffect(new DropShadow(20, 20, 20, Color.GRAY)); 
     root.getChildren().add(canvas); 
    } 
} 

example taken from the docs演示了如何创建图像出来byte[]。当您将图像存储到数据库中时,您会将其恢复为byte[]
现在,你如何从数据库中检索图像完全取决于你,但一旦你找回它,你可以使用上面的程序将其转换成图像。

+0

谢谢。但是,这也可以在ImageView中实现吗? – acl