绘制框架画布

2024-04-19 07:36:45 发布

您现在位置:Python中文网/ 问答频道 /正文

我有以下功能:

def get_rgba_bitmap(fig):
  fig.canvas.draw()
  tab = fig.canvas.copy_from_bbox(fig.bbox).to_string_argb()
  ncols, nrows = fig.canvas.get_width_height()
  return numpy.fromstring(tab, dtype = numpy.uint8).reshape(nrows, ncols, 4)

有了这个功能,我可以创建一个图像的“地图”。请参阅link以了解我为什么需要“映射”和生成函数的答案的更多详细信息。绘制“地图”给出:

^{pr2}$

enter image description here

get_rgba_bitmap(fig)创建的画布是包括灰色背景的整个图形。当绘制“地图”时,灰色背景也被包括在内,缩小了实际图像的大小。在一个单一图像的情况下,这对我来说并不重要,因为有一种方法可以解决它。但是,我现在需要几个子批次,这确实成了一个问题。在

因此,我现在需要的是一个只创建绘图帧画布的函数。记号和标签并不重要。我试图修改get_rgba_bitmap函数,但它不能完全工作:

def test(fig, ax):
  fig.canvas.draw()
  tab = fig.canvas.copy_from_bbox(ax.bbox).to_string_argb()

  bbox = ax.get_window_extent().transformed(fig.dpi_scale_trans.inverted())
  width, height = bbox.width * fig.dpi, bbox.height * fig.dpi

  ncols, nrows = width, height
  return numpy.fromstring(tab, dtype = numpy.uint8).reshape(nrows + 1, ncols + 1, 4)

我认为问题在于ncolsnrows的错误值。不知道这是从哪里来的。在

如果我在reshape中的ncolsnrows都添加1,则脚本将运行并生成一个与我想要的图像相近的图像。但是,“地图”不能正确地适应新的绘图框,从外观上看,在xy中,它被关闭了1个像素。这对应于我需要添加到nrowsncols的1。我该怎么解决这个问题?在

enter image description here

谢谢你的帮助


Tags: 图像numpyget地图figwidthtabcanvas