EditableImage
*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.
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
Kích thước của EditableImage trong pixels.
Phương Pháp
- DrawCircle(center : Vector2,radius : number,color : Color3,transparency : number,combineType : Enum.ImageCombineType):()
Vẽ một vòng tròn tại điểm được chỉ định.
Vẽ thêm EditableImage vào vị trí này EditableImage tại vị trí đã cho.
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 .
- DrawImageTransformed(position : Vector2,scale : Vector2,rotation : number,image : EditableImage,options : Dictionary?):()
Vẽ một hình ảnh vào this EditableImage với các biến đổi bao gồm phóng to và xoay, đặt nó tại vị trí đã định.
Vẽ một đường giữa hai điểm được cung cấp.
- DrawRectangle(position : Vector2,size : Vector2,color : Color3,transparency : number,combineType : Enum.ImageCombineType):()
Vẽ một hình chữ nhật có kích thước đã cho tại vị trí trên cùng bên trái đã cho.
Đọc một khu vực hình chữ nhật của điểm ảnh thành một bộ nhớ.
Viết một khu vực hình chữ nhật của пикселов vào hình ảnh.
Thuộc Tính
Size
Phương Pháp
Destroy
Lợi Nhuận
DrawCircle
Tham Số
Lợi Nhuận
DrawImage
Tham Số
Lợi Nhuận
DrawImageProjected
Tham Số
Lợi Nhuận
DrawImageTransformed
Tham Số
Lợi Nhuận
Mẫu mã
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")
-- 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ố
Lợi Nhuận
DrawRectangle
Tham Số
Lợi Nhuận
ReadPixelsBuffer
Tham Số
Lợi Nhuận
Mẫu mã
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ố
Lợi Nhuận
Mẫu mã
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)