EditableImage

Hiển Thị Bản Đã Lỗi Thời

*Nội dung này được dịch bằng AI (Beta) và có thể có lỗi. Để xem trang này bằng tiếng Anh, hãy nhấp vào đây.

Không Thể Tạo

EditableImage cho phép tạo và thao tác hình ảnh trong thời gian thực.

Để tạo một trống EditableImage , sử dụng AssetService:CreateEditableImage() . Để tạo một EditableImage từ một hình ảnh hiện có, sử dụng AssetService:CreateEditableImageAsync() .

có thể được sử dụng trong bất kỳ tài sản nào có chứa hình ảnh, chẳng hạn như hoặc .Điều này được thực hiện bằng cách đặt thuộc tính nội dung thành Content.fromObject(editableImage) .

Hệ tọa độ EditableImage là tương đối với phía trên cùng bên trái của hình ảnh:

  • Bên trái trên cùng: (0, 0)
  • Ở phía dưới bên phải: (Size.X - 1, Size.Y - 1)

Khi bạn sử dụng AssetService:PromptCreateAssetAsync() để xuất bản một đối tượng có một thuộc tính Content tham chiếu một EditableImage , hình ảnh có thể chỉnh sửa được xuất bản như một hình ảnh và thuộc tính được đặt thành một ID tài sản mới.

Cập nhật giới hạn

Chỉ có một đơn EditableImage duy nhất có thể được cập nhật mỗi khung trên bên hiển thị.Ví dụ, nếu bạn cập nhật ba đối tượng EditableImage đang được hiển thị, sẽ mất ba khung để tất cả chúng được cập nhật.

Bật EditableImage cho các trải nghiệm đã xuất bản

Vì mục đích bảo mật, sử dụng EditableImage không thành công mặc định đối với các trải nghiệm đã xuất bản.Để bật sử dụng EditableImage , bạn phải là 13+ tuổi được xác minh và ID được xác minh.Sau khi được xác minh, mở Studio .Chọn Tập tin > Cài đặt trò chơi > Bảo mật và bật chuyển công tắc Cho phép Mesh & Image API .Hãy nhớ xem xét các điều khoản sử dụng trước khi bật chuyển đổi.

Quyền

Để ngăn chặn lạm dụng, AssetService:CreateEditableImageAsync() chỉ cho phép bạn tải và chỉnh sửa tài nguyên hình ảnh:

  • Đó là sở hữu của người tạo ra trải nghiệm (nếu trải nghiệm được sở hữu bởi một cá nhân).
  • Thuộc sở hữu của một nhóm (nếu trải nghiệm thuộc sở hữu của nhóm).
  • Những người sở hữu bởi người dùng Studio đã đăng nhập (nếu tập tin chỗ chưa được lưu hoặc xuất bản vào Roblox).

Các API sẽ ném lỗi nếu chúng được sử dụng để tải một tài sản không đáp ứng các tiêu chí trên.

Tóm Tắt

Thuộc Tính

Phương Pháp

Thuộc Tính

Chỉ Đọc
Không Sao Chép
Đọc Song Song

Kích thước của EditableImage trong pixels.Kích cỡ tối đa là 1024×1024.Một EditableImage không thể được thay đổi kích thước; thuộc tính này chỉ đọc.Để thay đổi kích thước hoặc cắt một hình ảnh, tạo một hình mới EditableImage và sử dụng DrawImageTransformed() để chuyển nội dung; sau đó gọi Destroy() .

Phương Pháp

Destroy

()

Phá hủy nội dung của hình ảnh, ngay lập tức lấy lại bộ nhớ đã sử dụng.


Lợi Nhuận

()

DrawCircle

()

Vẽ một vòng tròn tại điểm được chỉ định trên EditableImage .Nếu vòng tròn là một nửa trong suốt, nó sẽ được pha trộn với các điểm ảnh phía sau nó bằng cách sử dụng source over blending.

Tham Số

center: Vector2

Trung tâm của vòng tròn, so với góc trên cùng bên trái của EditableImage . Các vị trí ngoài giới hạn bản vẽ được phép.

Giá Trị Mặc Định: ""
radius: number

Bán kính của vòng tròn bằng pixel.

Giá Trị Mặc Định: ""
color: Color3

Màu của vòng tròn.

Giá Trị Mặc Định: ""
transparency: number

Độ trong suốt của vòng tròn với 0 hoàn toàn mờ và 1 hoàn toàn minh bạch.

Giá Trị Mặc Định: ""

Làm thế nào các пиксел của hình ảnh nguồn được kết hợp với пиксел của hình ảnh được thêm vào.

Giá Trị Mặc Định: ""

Lợi Nhuận

()

DrawImage

()

Vẽ thêm EditableImage vào vị trí này EditableImage tại vị trí đã cho.Các vị trí ngoài giới hạn bản vẽ được phép như vậy chỉ một phần của hình ảnh mới được vẽ.

Tham Số

position: Vector2

Vị trí mà góc trên cùng bên trái của hình ảnh được thêm sẽ được vẽ.

Giá Trị Mặc Định: ""

The EditableImage để vẽ vào đây EditableImage .

Giá Trị Mặc Định: ""

Làm thế nào các пиксел của hình ảnh nguồn nên được kết hợp với пиксел của hình ảnh được thêm vào.

Giá Trị Mặc Định: ""

Lợi Nhuận

()

DrawImageProjected

()

Dự án một khác EditableImage vào một EditableMesh và lưu kết quả trên điều này EditableImage bằng cách sử dụng cấu hình dự án và bàn chải được chỉ định.

Tham Số

The EditableMesh được sử dụng để dự án vào.

Giá Trị Mặc Định: ""
projection: Dictionary

Từ điển cấu hình chiếu bao gồm các cặp chìa khóa-giá trị sau:

  • Direction ( Vector3 ) nơi chiếc máy chiếu đang hướng tới.
  • Position ( Vector3 ) như vị trí trong không gian địa phương với tư cách là mesh.
  • Size ( Vector3 ) như kích thước của máy chiếu.
  • Up ( Vector3 ) như vectơ lên của máy chiếu trong không gian địa phương với tương quan lưới.
Giá Trị Mặc Định: ""
brushConfig: Dictionary

Từ điển cấu hình bàn chải bao gồm các cặp chìa khóa-giá trị sau:

  • AlphaBlendType ( Enum.ImageAlphaType ) xác định cách dự sao này sẽ kết hợp các giá trị alpha.
  • ColorBlendType ( Enum.ImageCombineType ) xác định cách phối màu này sẽ kết hợp các giá trị màu.
  • Decal ( EditableImage ) như hình ảnh được sử dụng cho việc chiếu.
  • FadeAngle (number) như góc ở độ cho các cạnh chiếu bị rơi tắt.
  • BlendIntensity (number) như giá trị giữa 01 mà kiểm soát bao nhiêu phần dự sao được pha trộn vào hình ảnh kết quả.
Giá Trị Mặc Định: ""

Lợi Nhuận

()

DrawImageTransformed

()

Phương pháp này cho phép bạn vẽ một EditableImage vào EditableImage với các biến đổi được áp dụng, chẳng hạn như thay đổi kích thước và xoay.Tham số vị trí xác định vị trí điểm pivot của hình ảnh nguồn sẽ được đặt trên hình ảnh này sau khi biến đổi.Các vị trí ngoài giới hạn bản vẽ được phép như vậy chỉ một phần của hình ảnh mới được vẽ.

Tham Số

position: Vector2

Vị trí bằng pixel nơi điểm pivot của hình ảnh nguồn sẽ được đặt trên hình ảnh này.

Giá Trị Mặc Định: ""
scale: Vector2

Các yếu tố phân bố cho hình nguồn dọc theo trục X và Y.

Giá Trị Mặc Định: ""
rotation: number

Góc xoay bằng độ, được áp dụng xung quanh điểm trung tâm của hình ảnh nguồn.

Giá Trị Mặc Định: ""

Nguồn EditableImage được vẽ vào hình ảnh này.

Giá Trị Mặc Định: ""
options: Dictionary

Từ điển bắt buộc cho cấu hình bổ sung:

  • CombineType : Xác định cách các điểm ảnh của hình ảnh nguồn kết hợp với các điểm ảnh của mục tiêu. Mặc định là Enum.ImageCombineType.AlphaBlend .
  • SamplingMode : Chỉ định phương pháp lấy mẫu (ví dụ Default cho bilinear hoặc Pixelated cho neighbor gần nhất). Mặc định là Enum.ResamplerMode.Default .
  • PivotPoint : Xác định điểm trung tâm trong hình nguồn để thay đổi kích thước và xoay. Mặc định là trung tâm của hình nguồn (tức là Image.Size / 2 ).
Giá Trị Mặc Định: ""

Lợi Nhuận

()

Mẫu mã

The following code draws a rotated and scaled image onto another.

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
}
)

The following code shows how cropping an image can be done using the EditableImage:DrawImageTransformed() method.

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

()

Vẽ một đường chống lẫn trên EditableImage một pixel dày giữa hai điểm được cung cấp.

Tham Số

Điểm bắt đầu của dòng.

Giá Trị Mặc Định: ""

Điểm cuối của dòng.

Giá Trị Mặc Định: ""
color: Color3

Màu của dòng.

Giá Trị Mặc Định: ""
transparency: number

Minh bạch của dòng.

Giá Trị Mặc Định: ""

Làm thế nào các пиксел của hình ảnh nguồn được kết hợp với пиксел của hình ảnh được thêm vào.

Giá Trị Mặc Định: ""

Lợi Nhuận

()

DrawRectangle

()

Vẽ một hình chữ nhật trên EditableImage của kích thước đã cho ở vị trí trên cùng bên trái.

Tham Số

position: Vector2

Vị trí của phía trên bên trái của hình chữ nhật. Không giống như các phương pháp vẽ khác, điều này không thể nằm ngoài giới hạn canvas của EditableImage .

Giá Trị Mặc Định: ""
size: Vector2

Kích thước của hình chữ nhật để vẽ, bằng điểm.

Giá Trị Mặc Định: ""
color: Color3

Màu của hình chữ nhật.

Giá Trị Mặc Định: ""
transparency: number

Minh bạch của hình chữ nhật.

Giá Trị Mặc Định: ""

Làm thế nào các пиксел của hình ảnh nguồn được kết hợp với пиксел của hình ảnh được thêm vào.

Giá Trị Mặc Định: ""

Lợi Nhuận

()

ReadPixelsBuffer

Ghi Song Song

Đọc một khu vực hình chữ nhật của điểm từ một EditableImage và trả lại nó như một bộ nhớ.Mỗi số trong bộ nhớ là một byte duy nhất, với các điểm ảnh được lưu trong một chuỗi bốn byte (màu đỏ, xanh lá, xanh dương và alpha).

Lưu ý rằng phương pháp này sử dụng alpha thay vì minh bạch, không giống như các phương pháp vẽ EditableImage .

Tham Số

position: Vector2

Góc trên cùng bên trái của khu vực hình chữ nhật của điểm để đã xem.

Giá Trị Mặc Định: ""
size: Vector2

Kích thước của khu vực hình chữ nhật của điểm để đã xem.

Giá Trị Mặc Định: ""

Lợi Nhuận

Khoảng trống mà mỗi điểm ảnh được đại diện bởi bốn bayt (màu đỏ, xanh lá, xanh dương và alpha lần lượt).Chiều dài của bộ nhớ có thể được tính là Size.X * Size.Y * 4 bytes.

Mẫu mã

The following code reads two pixels from a EditableImage and creates a part with the average color between them.

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 = (255 - buffer.readu8(pixelsBuffer, 3)) / 255
local color2 =
Color3.fromRGB(buffer.readu8(pixelsBuffer, 4), buffer.readu8(pixelsBuffer, 5), buffer.readu8(pixelsBuffer, 6))
local transparency2 = (255 - buffer.readu8(pixelsBuffer, 7)) / 255
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

()

Viết một khu vực hình chữ nhật của像素 vào một EditableImage từ một buffer.Mỗi số trong bộ nhớ là một byte duy nhất, với các điểm ảnh được lưu trong một chuỗi bốn byte (màu đỏ, xanh lá, xanh dương và alpha).

Lưu ý rằng phương pháp này sử dụng alpha thay vì minh bạch, không giống như các phương pháp vẽ EditableImage .

Tham Số

position: Vector2

Góc trên cùng bên trái của khu vực hình chữ nhật để vẽ các пиксел vào.

Giá Trị Mặc Định: ""
size: Vector2

Kích thước của khu vực hình chữ nhật của пикселей để viết.

Giá Trị Mặc Định: ""
buffer: buffer

Một bộ nhớ lưu trữ nơi mỗi pixel được đại diện bởi bốn bayt (màu đỏ, xanh lá, xanh dương và alpha lần lượt).Chiều dài của bộ nhớ lưu trữ nên là Size.X * Size.Y * 4 bytes.

Giá Trị Mặc Định: ""

Lợi Nhuận

()

Mẫu mã

The following code reads the pixels of a EditableImage and writes back the inverted color values of those pixels.

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))
-- Set alpha to 255 to make all pixels fully opaque.
buffer.writeu8(pixelsBuffer, pixelIndex + 3, 255)
end
editableImage:WritePixelsBuffer(Vector2.zero, editableImage.Size, pixelsBuffer)

Sự Kiện