EditableImage 는 이미지의 런타임 생성 및 조작을 지원합니다.
빈 EditableImage 을 생성하려면 AssetService:CreateEditableImage() 를 사용합니다. 기존 이미지에서 EditableImage 을 생성하려면 2>Class.AssetService:CreateEditableImageAsync()2> 를 사용합니다.
EditableImage 는 이미지를 가져오는 모든 속성에서 사용할 수 있습니다. 이 속성은 컨텐츠 속성에 대해 Content 또는 ImageLabel.ImageContent 와 같이 사용됩니다. 이는 ��������
Class.EditableImage 좌표 시스템은 이미지의 왼쪽 상단에 대해 상대적입니다.
- 왼쪽 상단: (0, 0)
- 오른쪽 하단: (Size.X - 1, Size.Y - 1)
Class.AssetService:PromptCreateAssetAsync() 를 사용하여 참조하는 Content 속성을 가진 개체를 게시하면 편집 가능한 이미지가 편집 가능한 이미지로 게시되고 속성이 새 자산 ID로 설정됩니다.
요약
메서드
- DrawCircle(center : Vector2,radius : number,color : Color3,transparency : number,combineType : Enum.ImageCombineType):void
지정된 점에서 원을 그립니다.
이 위치에 있는 다른 EditableImage 를 이 EditableImage 에 드로우.
- DrawImageTransformed(position : Vector2,scale : Vector2,rotation : number,image : Object,options : Dictionary?):void
크기 조정 및 회전과 같은 변환을 사용하여 이 EditableImage 에 이미지를 그립니다.
제공된 두 점 사이에 라인을 그립니다.
- DrawRectangle(position : Vector2,size : Vector2,color : Color3,transparency : number,combineType : Enum.ImageCombineType):void
지정된 크기의 직사각형을 왼쪽 상단에 표시합니다.
버퍼에 직사각형 영역의 픽셀을 읽습니다.
이미지에 직사각형 픽셀 영역을 쓰십시오.
속성
Size
Class.EditableImage의 크기를 픽셀 단위로 지정합니다. 최대 크기는 1024×1024입니다. 이 속성을 더 크게 설정하면 1024가 늘어납니다.
이 속성을 설정하면 캔버스 크기가 편집 이미지의 크기를 변경하지만 콘텐츠를 크기 조정하지는 않습니다. 크기를 변경하면 [0, 0, 0, 0]의 RGBA 값이 설정됩니다. 크기를 변경
메서드
Destroy
반환
DrawCircle
Class.EditableImage 의 지정된 위치에서 원을 그립니다. 원이 반투명인 경우 소스 위에서 믹싱하여 픽셀을 혼합합니다.
매개 변수
Class.EditableImage 의 왼쪽 상단 모서리에 대한 원의 중심. 캔버스 범위 밖의 위치는 허용됩니다.
원의 반경을 피소트 단위로 지정합니다.
원의 색.
0이 완전히 불투명하고 1이 완전히 투명한 원의 투명도.
원본 이미지의 픽셀이 추가 이미지의 픽셀과 어떻게 혼합됩니다.
반환
DrawImage
이 EditableImage 에 다른 EditableImage 를 그립니다. 위치에 따라 캔버스 영역 밖의 위치는 허용되므로 새 이미지의 일부만 그려집니다.
매개 변수
추가 이미지의 왼쪽 상단 모서리에 색상이 그려질 위치입니다.
이 EditableImage 에 그려 EditableImage .
원본 이미지의 픽셀과 추가 이미지의 픽셀을 어떻게 혼합해야 합니까.
반환
DrawImageTransformed
이 메서드를 사용하면 크기 조정 및 회전과 같은 변환을 적용한 이 EditableImage 에 트랜스포머를 그리고, 위치 매개 변수는 변환 후에 소스 이미지의 피벗 포인트를 이 이미지에 배치하도록 지정합니다. 캔버스 범위 외의 위치는 그려지지 않도
매개 변수
원본 이미지의 피벗 포인트가 이 이미지에 배치되는 위치를 피벗 포인트 위치에 대한 위치 매개 변수에 대해 설명합니다.
X 및 Y 축을 따라 원본 이미지에 대한 크기 조정 요소.
원본 이미지의 피벗 점 주위에 적용된 회전 각도입니다.
이 이미지에 그려질 원본 EditableImage입니다.
추가 구성을 위한 선택적 사전:
- CombineType : 원본 이미지의 픽셀이 대상의 픽셀과 어떻게 결합하는지 지정합니다. 기본은 Enum.ImageCombineType.AlphaBlend 입니다.
- SamplingMode : 샘플 메서드를 지정(예: Default 또는 가장 가까운 이웅 이웅 이웅 이웅 이웅 이웅 이웅 이웅 이웅 이웅 이웅 이웅 이웅 이웅 이웅 이웅 이웅 이웅 이웅 이웅 이웅 이��
- PivotPoint : 크기 조정 및 회전을 위해 원본 이미지 내의 피벗 포인트를 지정합니다. 기본은 원본 이미지의 중심(즉, Image.Size / 2).
반환
코드 샘플
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")
-- 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
Class.EditableImage 두 개의 지점 사이에 한 픽셀 두께의 반악기 라인을 그립니다.
매개 변수
라인의 시작 점.
줄의 끝점입니다.
줄의 색.
줄의 투명도.
원본 이미지의 픽셀이 추가 이미지의 픽셀과 어떻게 혼합됩니다.
반환
DrawRectangle
지정된 크기의 EditableImage 의 왼쪽 상단에 있는 직사각형을 그립니다.
매개 변수
직사각형의 왼쪽 상단 위치. 다른 그림 메서드와는 달리 이 작업은 EditableImage 의 캔버스 영역 밖에 수행할 수 없습니다.
그리기 직사각형의 크기, 인 픽셀.
직사각형의 색.
직사각형의 투명도.
원본 이미지의 픽셀이 추가 이미지의 픽셀과 어떻게 혼합됩니다.
반환
ReadPixelsBuffer
버퍼를 테이블 대신 반환하는 ReadPixels()의 버전입니다. 각 버퍼 번호는 단일 바이트이며, 각 테이블 번호는 4바이트입니다, 만 ReadPixelsBuffer() 더 효율적입니
Class.EditableImage 그리기 방법과는 달리 이 메서드는 알파를 사용하므로 투명하지 않습니다.
매개 변수
반환
각 픽셀이 4바이트(빨강, 녹색, 파란색 및 알파)로 표시되는 버퍼입니다. 버퍼의 길이는 Size.X * Size.Y * 4 바이트로 계산할 수 있습니다.
코드 샘플
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
버퍼 대신 테이블이 아닌 WritePixels() 버전입니다. 각 버퍼 번호는 단일 바이트이며, 각 테이블 번호는 4바이트입니다, 만 WritePixelsBuffer() 더 효율적입
Class.EditableImage 그리기 방법과는 달리 이 메서드는 알파를 사용하므로 투명하지 않습니다.
매개 변수
직사각형 영역의 왼쪽 상단 모서리를 사용하여 픽셀을 그립니다.
픽셀의 직사각형 영역 크기를 기록합니다.
각 픽셀이 4바이트(빨간색, 녹색, 파란색 및 알파)로 표시되는 버퍼입니다. 버퍼의 길이는 Size.X * Size.Y * 4 바이트여야 합니다.
반환
코드 샘플
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)