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 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
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
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ố
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.
Bán kính của vòng tròn bằng pixel.
Màu của vòng tròn.
Độ 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.
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.
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ố
Vị trí mà góc trên cùng bên trái của hình ảnh được thêm sẽ được vẽ.
The EditableImage để vẽ vào đây EditableImage .
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.
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.
Từ điển cấu hình chiếu bao gồm các cặp chìa khóa-giá trị sau:
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 0 và 1 mà kiểm soát bao nhiêu phần dự sao được pha trộn vào hình ảnh kết quả.
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ố
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.
Các yếu tố phân bố cho hình nguồn dọc theo trục X và Y.
Góc xoay bằng độ, được áp dụng xung quanh điểm trung tâm của hình ảnh nguồn.
Nguồn EditableImage được vẽ vào hình ảnh này.
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 ).
Lợi Nhuận
Mẫu mã
The following code draws a rotated and scaled image onto another.
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.
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.
Điểm cuối của dòng.
Màu của dòng.
Minh bạch của dòng.
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.
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ố
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 .
Kích thước của hình chữ nhật để vẽ, bằng điểm.
Màu của hình chữ nhật.
Minh bạch của hình chữ nhật.
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.
Lợi Nhuận
ReadPixelsBuffer
Đọ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ố
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.
Kích thước của khu vực hình chữ nhật của điểm để đã xem.
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.
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ố
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.
Kích thước của khu vực hình chữ nhật của пикселей để viết.
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.
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.
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)