EditableImage 允許您在執行時創建和操作圖像。
要創建空白 EditableImage,請使用 AssetService:CreateEditableImage() 。要從現有圖像創建 EditableImage ,請使用 1> Class.AssetService:CreateEditableImageAsync()1> 。
Class.EditableImage 可以在任何 Content 屬性上使用,例如 ImageLabel.ImageContent 或 0> Class.MeshPart.TextureContent0>。這是通過將內容屬性設置為 EditableImage3> 來做到的
Class.EditableImage 坐標系統是畫像的左上角:
- 左上角:(0, 0)
- 右下角:(Size.X - 1, Size.Y - 1)
當您使用 AssetService:PromptCreateAssetAsync() 發布具有 Content 屬性的對象,參考 EditableImage ,編輯的圖像是發布為圖像,屬性設為新的資產 ID。
啟用已發佈的體驗編輯圖像
為了安全目的,使用 EditableImage 對發佈的體驗預設為失敗。若要啟用 EditableImage ,您必須是 13 歲以上的年齡,並且身份驗證。在您被驗證後,請從 Studio 選擇
許可
為了防止濫用, AssetService:CreateEditableImageAsync() 只允許您載入和編輯圖像資產:
- 那些是擁有體驗的創作者的 (如果體驗屬於個人).
- 那些是由群組所擁有的 (如果體驗屬於群組)。
- 那些是由已登入的 Studio 使用者擁有的(如果該位置檔案尚未儲存或發佈到 Roblox)。
使用 APIs 載入資產,不符合上述條件,將會發生錯誤。
概要
方法
- 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 。 Draws an image into this Class.EditableImage with transformations including scaling and rotation, placing it at the specified position.
在提供的兩個點之間擺出一條線。
- DrawRectangle(position : Vector2,size : Vector2,color : Color3,transparency : number,combineType : Enum.ImageCombineType):void
在指定的上方左邊位置畫出一個長方形。
將一個長方形的區域的像素變成缓存器。
將像素的長方形區域寫入圖像。
屬性
方法
Destroy
立即摧毀圖像的內容,並且立即重新佔領使用的記憶體。
返回
DrawCircle
在 EditableImage 的指定位置圖製成圓圈。如果圓圈是半透明,它會在使用源於圓圈後的漸漸模糊。
參數
Class.EditableImage 的中心,相對於 Class.EditableImage 的左上角。 positions 外的位置允許。
圓圈的範圍以像素計。
圓圈的顏色。
圓圈的透明度,0 為完全不透明,1 為完全透明。
如何將來源圖像的畫素與添加的圖像的畫素混合。
返回
DrawImage
將另一個 EditableImage 拖入此 EditableImage 在指定位置。位置在畫布範圍外允許,以便只有新圖像的一部分被畫。
參數
返回
DrawImageTransformed
此方法讓您將 EditableImage 畫入此 EditableImage 使用適用於變形的轉換,例如縮放和旋轉。位置參數指定源圖像的中心點將在此圖像後移動。因此,在畫布外的位置允許只有新圖像的一部分被畫。
參數
在此圖像上將源圖像的中心點放置在此位置。
以 X 和 Y 軸上的源圖像為基礎調整因素。
適用於源影像的中心點的旋轉角度。
源 EditableImage 要被绘制到此圖像。
額外設定的選擇性字典:
- CombineType : 指定來源圖像的像素與目標的像素的方式。預設值是 Enum.ImageCombineType.AlphaBlend。
- SamplingMode : 指定樣本方法 (例如 Default 對於直線或 Pixelated 對於最鄰近的鄰居。預設值是 0> enum.resamplerMode.DEFAULT0>。
- PivotPoint : 指定來源圖像內的 pivot 點以調整尺寸和旋轉。預設為來源圖像中心 (i.e. 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
一個版本的 ReadPixels() 以返回資料表而不是擷取表。 每個數字在擷取表中的單一位元,而每個數字在資料表中的四個位元,使 ReadPixelsBuffer() 比 Class.EditableImage:ReadPixels
注意,此方法使用 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
一個使用表而不是陣列的版本 WritePixels() 。每個數字在陣列中是單個位元,而每個數字在桌子中是 4 個位元,使 WritePixelsBuffer() 比 Class.EditableImage:WritePixels()|WritePixels
注意,此方法使用 alpha 而不是透明度,與 EditableImage 繪製方法不同。
參數
右方形區域的左上角,將像素帶入。
像素的長方形區域大小。
在每個像素由四個字節 (紅、綠、藍、Alpha 代表) 代表時,長度的 buffer 應為 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)