gpt4 book ai didi

wolfram-mathematica - 控制笔记本相关表达式的 Rasterize[] 宽度

转载 作者:行者123 更新时间:2023-12-01 02:41:04 27 4
gpt4 key购买 nike

更新 向导先生的回答给出了像素完美的结果,但它仅适用于 Windows,并且会破坏剪贴板内容。我的答案应该适用于任何平台,但不太精确:例如它省略了输入/输出标签。它确实允许设置光栅化宽度。

这个问题是我在trying to make a preview window for an image uploader的时候出现的(见那个答案的结尾)。

我想创建一个调色板按钮,它将当前笔记本选择作为图像上传。在上传之前,我想显示图像的预览,以减少在联系服务器之前出现问题的可能性。

这是我到目前为止所拥有的(仅包括预览代码,不包括上传器):

button = Button[
"Preview",
Module[
{expr = NotebookRead@InputNotebook[]},
If[expr =!= {},
With[{img = Rasterize[expr]},
MessageDialog[
Column[{"Would you like to perform the action?", img}],
{"Do it!" :> doIt[img], "Cancel" :> Null}
]
]
]
]
]

如果您想知道为什么我使用嵌套 With里面 Module而不是制作 img也是一个模块变量:这是因为到了 doIt[img]被评估,本地模块变量将被清除,所以我需要将光栅化表达式直接替换为 doIt功能,

此按钮有效(或多或少)。您可以通过在同一笔记本中创建图形(例如 Graphics[Circle[]] )来尝试它,单击选择它,然后单击预览按钮。

但是,如果我使用 CreatePalette[button] 将其放入调色板中,那么调色板的窗口宽度将发生光栅化,我得到这样的结果:

Screenshot of the problem

如何控制光栅化的宽度,或者更一般地说,如何为避免此问题的上传者创建预览对话框?

为了进一步改进,最好能够调整消息窗口的大小,使其适合预览图像(并且仍然显示按钮:按钮随着 WindowSize -> All 消失)。

答案

巫师先生的建议:
button = Button[
"Preview", (FrontEndExecute[
FrontEndToken[FrontEnd`SelectedNotebook[], "CopySpecial", "MGF"]];
MessageDialog[
First@Cases[NotebookGet@ClipboardNotebook[],
RasterBox[data_, ___] :>
Image[data, "Byte", ColorSpace -> "RGB", Magnification -> 1],
Infinity]])]

CreatePalette[button]

问题:它(可能)仅适用于 Windows,并且会破坏剪贴板内容。

最佳答案

如果在此操作中使用剪贴板可行,您可以使用:FrontEnd`CopySpecial["MGF"] (复制为位图)。

关于wolfram-mathematica - 控制笔记本相关表达式的 Rasterize[] 宽度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8353838/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com