EditableImage

显示已弃用

*此内容使用人工智能(Beta)翻译,可能包含错误。若要查看英文页面,请点按 此处

无法创建

EditableImage 允许您在运行时创建和操作图像。

要创建一个空白的 EditableImage ,请使用 AssetService:CreateEditableImage() 。 要从现有图像中创建一个 EditableImage ,请使用 2> Class.AssetService:CreateEditableImageAsync()2> 。

Class.EditableImage 可以在任何 Content 属性中使用,例如 ImageLabel.ImageContent 或 0> Class.MeshPart.TextureContent0> 。这是通过将内容属性设置为 EditableImage3> 或 6> Class.MeshPart.

Class.EditableImage 坐标系统与图像的左上角相对:

  • 左上角:(0, 0)
  • 右下: (Size.X - 1, Size.Y - 1)

当您使用 AssetService:PromptCreateAssetAsync() 发布具有 Content 属性的对象,该可编辑的图像发布为图像,属性设置为新的资产 ID,当前资产 ID 为 EditableImage

概要

属性

  • 只读
    未复制
    读取并联

    Class.EditableImage 的大小以像素计。

方法

属性

只读
未复制
读取并联

Class.EditableImage 的大小以像素计量。最大大小为 1024×1024。尝试将此属性设置为更大的大小会导致它被压缩为 1024。

设置此属性将 canvas 图像的大小更改为编辑可编辑图像的大小,但不会更改内容。如果更改为更大的大小,新像素将设置为 [0, 0, 0, 0] 。如果更改为更小的大小,现有像素将被裁剪。 考虑使用 Class.EditableImage:

方法

Destroy

void

返回

void

DrawCircle

void

EditableImage 上指定的位置画出一个圆圈。如果圆圈是半透明,它将使用源代码在背后的像素与它们混合。

参数

center: Vector2

中心点与 EditableImage 的左上角相对。外部位置允许。

radius: number

圆圈的半径以像素计数。

color: Color3

圆圈的颜色。

transparency: number

透明度圆圈中的 0 是完全不透明的, 1 是完全透明的。

如何使源图像的像素与添加的图像的像素混合。


返回

void

DrawImage

void

将另一个 EditableImage 绘制到这个 EditableImage 在指定位置。位置在画布边缘之外允许,以便仅绘制新图像的一部分。

参数

position: Vector2

添加图像的左上角的位置。

image: Object

Class.EditableImage 以绘制到此 EditableImage .

如何将源图像的像素与添加的图像的像素混合。


返回

void

DrawImageProjected

void

参数

mesh: Object
projection: Dictionary
brushConfig: Dictionary

返回

void

DrawImageTransformed

void

此方法允许您将 EditableImage 绘制到此 EditableImage 中,并且在上下文中添加了变形,例如缩放和旋转。 位置参数指定源图像的中心点在此图像上会在变形后放置在哪里。 位置在画布边缘之外允许,以便仅绘制新图像的一部分。

参数

position: Vector2

在此图像上将源图像的中心点放置在这个图像上。

scale: Vector2

对 X 和 Y 轴上的源图像的缩放因素。

rotation: number

源图像的旋转角度,在源图像的中心点周围应用。

image: Object

EditableImage 要被绘制到此图像。

options: Dictionary

可选的字典以进一步配置:

  • CombineType : 指定源图像的像素与目标的像素的混合方式。默认值为 Enum.ImageCombineType.AlphaBlend
  • SamplingMode : 指定采样方法 (例如 Default 对于直线或 Pixelated 对于最近的邻居)。默认是 0> enum.resamplerMode.DEFAULT0> .
  • PivotPoint : 在源图像中指定 pivot 点,用于缩放和旋转。默认值是源图像中心(即 Image.Size / 2)。

返回

void

代码示例

EditableImage:DrawImageTransformed()

local AssetService = game:GetService("AssetService")
-- Example of drawing a rotated and scaled image onto another EditableImage
local srcImage = AssetService:CreateEditableImage({ Size = Vector2.new(256, 256) })
local dstImage = AssetService:CreateEditableImage({ Size = Vector2.new(512, 512) })
-- Drawing with a rotation of 45 degrees, scaling by 2x, and placing at (100, 100)
dstImage:DrawImageTransformed(
Vector2.new(100, 100), -- Position
Vector2.new(2, 2), -- Scale
45, -- Rotation (degrees)
srcImage, -- Source image
{
CombineType = Enum.ImageCombineType.AlphaBlend, -- Optional, default is AlphaBlend
SamplingMode = Enum.ResamplerMode.Default, -- Optional, default is Default
PivotPoint = srcImage.Size / 2 -- Optional, default is center of the source image
}
)
EditableImage:DrawImageTransformed() - Crop

local AssetService = game:GetService("AssetService")
-- Source image
local srcImage = AssetService:CreateEditableImageAsync(Content.fromUri(assetUri))
-- Crop area defined by offset and size
local cropOffset = Vector2.new(50, 50)
local cropSize = Vector2.new(100, 100)
-- Destination image with size of the crop area
local dstImage = AssetService:CreateEditableImage({ Size = cropSize })
-- Position (top-left corner)
local position = Vector2.new(0, 0)
-- Scale factors (no scaling)
local scale = Vector2.new(1, 1)
-- Rotation angle (no rotation)
local rotation = 0
-- Draw the source image onto the destination image with adjusted pivot to crop the image
dstImage:DrawImageTransformed(
position,
scale,
rotation,
srcImage,
{
CombineType = Enum.ImageCombineType.Overwrite,
PivotPoint = cropOffset -- Set pivot point to cropOffset to start drawing from there
}
)

DrawLine

void

EditableImage 上绘制一个反向纹线,其厚度在两个提供的点之间为一枚。

参数

开始线的起始点。

线路的终点。

color: Color3

线的颜色。

transparency: number

线的透明度。

如何使源图像的像素与添加的图像的像素混合。


返回

void

DrawRectangle

void

在给定的左上位置的 EditableImage 上绘制一个长方形。

参数

position: Vector2

位置在长方体的左上角。与其他绘制方法不同,此处无法在 EditableImage 的 canvas 边界之外。

size: Vector2

在像素级别上描绘长方形的大小。

color: Color3

长方形的颜色。

transparency: number

矩形的透明度。

如何使源图像的像素与添加的图像的像素混合。


返回

void

ReadPixelsBuffer

写入并联

一个返回缓冲器而不是表的版本。 每个在缓冲器中的数字都是单个字节,而不是每个在表中的字节,使 0>Class.EditableImage:ReadPixelsBuffer()|ReadPixels()0> 更有效率。 使 3>Class.EditableImage:ReadPixels()|ReadPixels()3> 更有效率。 使 6>Class.EditableImage:

注意,此方法使用 alpha 而不是透明度,与 EditableImage 绘制方法不同。

参数

position: Vector2

顶部左侧区域的像素区域以便已读取。

size: Vector2

像素的长方形区域大小。


返回

在每个像素由四个字节(红色、绿色、蓝色和 alpha 分别)表示的地方。长度可以计算为 Size.X * Size.Y * 4 字节。

代码示例

EditableImage:ReadPixelsBuffer()

local AssetService = game:GetService("AssetService")
local options = { Size = Vector2.new(32,32) }
local editableImage = AssetService:CreateEditableImage(options)
local pixelsBuffer = editableImage:ReadPixelsBuffer(Vector2.zero, Vector2.new(2, 1))
local color1 = Color3.fromRGB(buffer.readu8(pixelsBuffer, 0), buffer.readu8(pixelsBuffer, 1), buffer.readu8(pixelsBuffer, 2))
local transparency1 = 1 - buffer.readu8(pixelsBuffer, 3)
local color2 = Color3.fromRGB(buffer.readu8(pixelsBuffer, 4), buffer.readu8(pixelsBuffer, 5), buffer.readu8(pixelsBuffer, 6))
local transparency2 = 1 - buffer.readu8(pixelsBuffer, 7)
local averageColor = color1:Lerp(color2, 0.5)
local averageTransparency = (transparency1 + transparency2) / 2
local part = Instance.new("Part")
part.Color = averageColor
part.Transparency = averageTransparency
part.Parent = workspace

WritePixelsBuffer

void

一个使用缓冲器而不是表的版本。每个数量在缓冲器中的一个单一字节,而不是每个数量在表中的 4 个字节,使 Class.EditableImage:WritePixelsBuffer()|WritePixels() 更有效率。WritePixelsBuffer() 比 Class.EditableImage:WritePixels()|

注意,此方法使用 alpha 而不是透明度,与 EditableImage 绘制方法不同。

参数

position: Vector2

右长方形区域的左上角,将像素绘制到。

size: Vector2

像素的长方形区域的大小。

buffer: buffer

在每个像素由四个字节(红色、绿色、蓝色和 alpha )表示的缓冲器。长度应为 Size.X * Size.Y * 4 字节。


返回

void

代码示例

EditableImage:WritePixelsBuffer()

local AssetService = game:GetService("AssetService")
local options = { Size = Vector2.new(32,32) }
local editableImage = AssetService:CreateEditableImage(options)
local pixelsBuffer = editableImage:ReadPixelsBuffer(Vector2.zero, editableImage.Size)
for i = 1, editableImage.Size.X * editableImage.Size.Y do
local pixelIndex = (i - 1) * 4
buffer.writeu8(pixelsBuffer, pixelIndex, 255 - buffer.readu8(pixelsBuffer, pixelIndex))
buffer.writeu8(pixelsBuffer, pixelIndex + 1, 255 - buffer.readu8(pixelsBuffer, pixelIndex + 1))
buffer.writeu8(pixelsBuffer, pixelIndex + 2, 255 - buffer.readu8(pixelsBuffer, pixelIndex + 2))
end
editableImage:WritePixelsBuffer(Vector2.zero, editableImage.Size, pixelsBuffer)

活动