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 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, bạn phải là 13+ tuổi được xác minh và xác minh ID.Sau khi được xác minh, hãy mở Cài đặt trò chơi của Studio, chọn Bảo mật , và bật chuyển công tắc Cho phép Mesh / Image API .

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.

Giới hạn bộ nhớ

Tài sản có thể chỉnh sửa hiện đang đắt tiền cho việc sử dụng bộ nhớ.Để giảm tác động của nó đối với hiệu suất của khách hàng, EditableImage có ngân sách bộ nhớ bên khách nghiêm ngặt, mặc dù máy chủ, Studio và plugin hoạt động với bộ nhớ không giới hạn.Kết nối một EditableImage với nhiều loại dữ liệu liên quan đến hình ảnh Content (đa tham chiếu) có thể giúp tối ưu hóa bộ nhớ.

Tóm Tắt

Thuộc Tính

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

    Kích thước của EditableImage trong pixels.

Phương Pháp

Thuộc Tính

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

Phương Pháp

Destroy

()

Lợi Nhuận

()

DrawCircle

()

Tham Số

center: Vector2
Giá Trị Mặc Định: ""
radius: number
Giá Trị Mặc Định: ""
color: Color3
Giá Trị Mặc Định: ""
transparency: number
Giá Trị Mặc Định: ""
Giá Trị Mặc Định: ""

Lợi Nhuận

()

DrawImage

()

Tham Số

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

Lợi Nhuận

()

DrawImageProjected

()

Tham Số

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

Lợi Nhuận

()

DrawImageTransformed

()

Tham Số

position: Vector2
Giá Trị Mặc Định: ""
scale: Vector2
Giá Trị Mặc Định: ""
rotation: number
Giá Trị Mặc Định: ""
Giá Trị Mặc Định: ""
options: Dictionary
Giá Trị Mặc Định: ""

Lợi Nhuận

()

Mẫu mã

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 - Chỉnh sửa

local AssetService = game:GetService("AssetService")
-- Hình ảnh nguồn
local srcImage = AssetService:CreateEditableImageAsync(Content.fromUri(assetUri))
-- Khu vực cắt được định bởi offset và kích thước
local cropOffset = Vector2.new(50, 50)
local cropSize = Vector2.new(100, 100)
-- Hình ảnh đích với kích thước khu vực thu hoạch
local dstImage = AssetService:CreateEditableImage({ Size = cropSize })
-- Vị trí (góc trên cùng bên trái)
local position = Vector2.new(0, 0)
-- Yếu tố thước đo (không có phóng to)
local scale = Vector2.new(1, 1)
-- Góc xoay (không xoay)
local rotation = 0
-- Vẽ hình nguồn lên hình ảnh đích với trục xoay điều chỉnh để cắt hình ảnh
dstImage:DrawImageTransformed(position, scale, rotation, srcImage, {
CombineType = Enum.ImageCombineType.Overwrite,
PivotPoint = cropOffset, -- Đặt điểm trung tâm để bắt đầu vẽ từ đó bằng cách chuyển cropOffset
})

DrawLine

()

Tham Số

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

Lợi Nhuận

()

DrawRectangle

()

Tham Số

position: Vector2
Giá Trị Mặc Định: ""
size: Vector2
Giá Trị Mặc Định: ""
color: Color3
Giá Trị Mặc Định: ""
transparency: number
Giá Trị Mặc Định: ""
Giá Trị Mặc Định: ""

Lợi Nhuận

()

ReadPixelsBuffer

Ghi Song Song

Tham Số

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

Lợi Nhuận

Mẫu mã

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

()

Tham Số

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

Lợi Nhuận

()

Mẫu mã

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