如何在单独的框架中显示使用 2htdp 创建的图像?

问题描述 投票:0回答:1

在Racket编程语言中,如何在单独的框架中显示使用2htdp/image库创建的图像?

要点是:

2htdp/image:Racket教学语言的图像库 使用 2htdp/image 创建图像 在 Racket 中的单独 GUI 窗口(框架)中显示该图像 总而言之,问题是:

如何在 Racket 中获取使用 2htdp/image 库创建的图像,并将其显示在单独的、独立的 GUI 框架窗口中?

我正在创建一款类似于 Racket 中的 Catan 的游戏。理想的工作流程是在一帧中显示由 2htdp 图形制作的地图,并在主侦听器 REPL 中处理菜单和玩家操作。每当游戏数据发生变化时,它应该实时更新单独帧中的显示。

你能帮我把上面的描述翻译成英文吗?

这是地图和状态图 enter image description here

racket
1个回答
0
投票

请参阅Racket 文档 2.2.6 图像互操作性。您有三个选择:

  1. 您可以使用
    text%
     函数将图像插入到 pasteboard%
    insert
    对象中:
#lang racket/gui
(require 2htdp/image)

(define pasteboard (new pasteboard%))

(define frame (new frame%
                   [label "Example"]
                   [width 250]   
                   [height 250]))

(define editor-canvas (new editor-canvas%
                           [parent frame]
                           [editor pasteboard]))

(send frame show #t)

(define image
  (above (triangle 40 "solid" "red")
         (rectangle 40 30 "solid" "black")))

(send pasteboard insert image 25 25)
  1. 您可以使用
    pict
     将图像转换为 
    pict-convert
    ,然后调用
    pict->bitmap
    并绘制这样的位图。请注意,您必须需要另一个库 - pict
#lang racket/gui
(require 2htdp/image
         pict/convert)
(require (only-in pict
                  pict->bitmap))

(define image
  (above (triangle 40 "solid" "red")
         (rectangle 40 30 "solid" "black")))

(define my-bitmap (pict->bitmap (pict-convert image)))

(define frame (new frame%
                   [label "Example"]
                   [width 250]   
                   [height 250]))

(define canvas (new canvas% [parent frame]
                     [paint-callback
                      (lambda (canvas dc)
                        (send dc draw-bitmap my-bitmap 0 0))]))

(send frame show #t)
  1. 还有底层函数
    render-image
    ,由mrlib/image-core提供:
#lang racket/gui
(require 2htdp/image
         pict/convert)
(require (only-in pict
                  pict->bitmap)
         (only-in mrlib/image-core
                  render-image))

(define image
  (above (triangle 40 "solid" "red")
         (rectangle 40 30 "solid" "black")))

(define my-bitmap (pict->bitmap (pict-convert image)))

(define frame (new frame%
                   [label "Example"]
                   [width 250]   
                   [height 250]))

(define canvas (new canvas% [parent frame]
                     [paint-callback
                      (lambda (canvas dc)
                        (render-image my-bitmap dc 0 0))]))

(send frame show #t)
© www.soinside.com 2019 - 2024. All rights reserved.