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 。
概要
方法
- DrawCircle(center : Vector2,radius : number,color : Color3,transparency : number,combineType : Enum.ImageCombineType):void
在指定的点上画一个圆圈。
将另一个 EditableImage 绘制到这个 EditableImage 在指定位置。
- DrawImageTransformed(position : Vector2,scale : Vector2,rotation : number,image : Object,options : Dictionary?):void
将图像绘制到这个 EditableImage 中,包括缩放和旋转等变形,将其放置在指定位置。
在两个提供的点之间绘制一个线。
- DrawRectangle(position : Vector2,size : Vector2,color : Color3,transparency : number,combineType : Enum.ImageCombineType):void
在给定的左上位置绘制一个长方形。
将一个长方形的区域的像素读入到缓冲器。
将一个长方形的像素区域写入图像。
属性
Size
Class.EditableImage 的大小以像素计量。最大大小为 1024×1024。尝试将此属性设置为更大的大小会导致它被压缩为 1024。
设置此属性将 canvas 图像的大小更改为编辑可编辑图像的大小,但不会更改内容。如果更改为更大的大小,新像素将设置为 [0, 0, 0, 0] 。如果更改为更小的大小,现有像素将被裁剪。 考虑使用 Class.EditableImage:
方法
Destroy
返回
DrawCircle
在 EditableImage 上指定的位置画出一个圆圈。如果圆圈是半透明,它将使用源代码在背后的像素与它们混合。
参数
返回
DrawImage
将另一个 EditableImage 绘制到这个 EditableImage 在指定位置。位置在画布边缘之外允许,以便仅绘制新图像的一部分。
参数
返回
DrawImageTransformed
此方法允许您将 EditableImage 绘制到此 EditableImage 中,并且在上下文中添加了变形,例如缩放和旋转。 位置参数指定源图像的中心点在此图像上会在变形后放置在哪里。 位置在画布边缘之外允许,以便仅绘制新图像的一部分。
参数
在此图像上将源图像的中心点放置在这个图像上。
对 X 和 Y 轴上的源图像的缩放因素。
源图像的旋转角度,在源图像的中心点周围应用。
源 EditableImage 要被绘制到此图像。
可选的字典以进一步配置:
- CombineType : 指定源图像的像素与目标的像素的混合方式。默认值为 Enum.ImageCombineType.AlphaBlend 。
- SamplingMode : 指定采样方法 (例如 Default 对于直线或 Pixelated 对于最近的邻居)。默认是 0> enum.resamplerMode.DEFAULT0> .
- PivotPoint : 在源图像中指定 pivot 点,用于缩放和旋转。默认值是源图像中心(即 Image.Size / 2)。
返回
代码示例
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
}
)
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
在 EditableImage 上绘制一个反向纹线,其厚度在两个提供的点之间为一枚。
参数
开始线的起始点。
线路的终点。
线的颜色。
线的透明度。
如何使源图像的像素与添加的图像的像素混合。
返回
DrawRectangle
在给定的左上位置的 EditableImage 上绘制一个长方形。
参数
位置在长方体的左上角。与其他绘制方法不同,此处无法在 EditableImage 的 canvas 边界之外。
在像素级别上描绘长方形的大小。
长方形的颜色。
矩形的透明度。
如何使源图像的像素与添加的图像的像素混合。
返回
ReadPixelsBuffer
一个返回缓冲器而不是表的版本。 每个在缓冲器中的数字都是单个字节,而不是每个在表中的字节,使 0>Class.EditableImage:ReadPixelsBuffer()|ReadPixels()0> 更有效率。 使 3>Class.EditableImage:ReadPixels()|ReadPixels()3> 更有效率。 使 6>Class.EditableImage:
注意,此方法使用 alpha 而不是透明度,与 EditableImage 绘制方法不同。
参数
返回
在每个像素由四个字节(红色、绿色、蓝色和 alpha 分别)表示的地方。长度可以计算为 Size.X * Size.Y * 4 字节。
代码示例
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
一个使用缓冲器而不是表的版本。每个数量在缓冲器中的一个单一字节,而不是每个数量在表中的 4 个字节,使 Class.EditableImage:WritePixelsBuffer()|WritePixels() 更有效率。WritePixelsBuffer() 比 Class.EditableImage:WritePixels()|
注意,此方法使用 alpha 而不是透明度,与 EditableImage 绘制方法不同。
参数
右长方形区域的左上角,将像素绘制到。
像素的长方形区域的大小。
在每个像素由四个字节(红色、绿色、蓝色和 alpha )表示的缓冲器。长度应为 Size.X * Size.Y * 4 字节。
返回
代码示例
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)