EditableImage

顯示已棄用項目

*此內容是使用 AI(Beta 測試版)翻譯,可能含有錯誤。若要以英文檢視此頁面,請按一下這裡

無法建立

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 載入資產,不符合上述條件,將會發生錯誤。

概要

屬性

  • 唯讀
    未複製
    平行讀取

    Class.EditableImage 的大小以像素計。

方法

屬性

唯讀
未複製
平行讀取

Class.EditableImage 的尺寸以像素計。最大尺寸為 1024×1024。EditableImage 無法重新縮放;此屬性只閱取。為了重新縮放

方法

Destroy

void

立即摧毀圖像的內容,並且立即重新佔領使用的記憶體。


返回

void

DrawCircle

void

EditableImage 的指定位置圖製成圓圈。如果圓圈是半透明,它會在使用源於圓圈後的漸漸模糊。

參數

center: Vector2

Class.EditableImage 的中心,相對於 Class.EditableImage 的左上角。 positions 外的位置允許。

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 點以調整尺寸和旋轉。預設為來源圖像中心 (i.e. 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

平行寫入

一個版本的 ReadPixels() 以返回資料表而不是擷取表。 每個數字在擷取表中的單一位元,而每個數字在資料表中的四個位元,使 ReadPixelsBuffer() 比 Class.EditableImage:ReadPixels

注意,此方法使用 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

一個使用表而不是陣列的版本 WritePixels() 。每個數字在陣列中是單個位元,而每個數字在桌子中是 4 個位元,使 WritePixelsBuffer() 比 Class.EditableImage:WritePixels()|WritePixels

注意,此方法使用 alpha 而不是透明度,與 EditableImage 繪製方法不同。

參數

position: Vector2

右方形區域的左上角,將像素帶入。

size: Vector2

像素的長方形區域大小。

buffer: buffer

在每個像素由四個字節 (紅、綠、藍、Alpha 代表) 代表時,長度的 buffer 應為 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)

活動