[orx-image-fit] Add imageFitSub function
Introduce the `imageFitSub` function, enabling subsections of images to be drawn with fit and alignment capabilities. Added a demo showcasing its usage with grid-based rendering and updated dependencies with `orx-noise` for randomness support.
This commit is contained in:
@@ -21,6 +21,7 @@ kotlin {
|
||||
dependencies {
|
||||
implementation(project(":orx-shapes"))
|
||||
implementation(project(":orx-image-fit"))
|
||||
implementation(project(":orx-noise"))
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -153,3 +153,35 @@ fun Drawer.imageFit(
|
||||
image(img, source, target)
|
||||
return Pair(source, target)
|
||||
}
|
||||
|
||||
/**
|
||||
* Draws a subsection of the given image into a target rectangle within the current `Drawer` bounds,
|
||||
* using the specified fit method and alignment.
|
||||
*
|
||||
* @param img The `ColorBuffer` representing the image to draw.
|
||||
* @param source The subsection of the image to be fitted, defined as a `Rectangle`. Defaults to the full bounds of the image.
|
||||
* @param target The rectangle within the `Drawer` bounds where the image will be drawn. Defaults to the full bounds of the `Drawer`.
|
||||
* @param horizontalPosition Horizontal alignment or cropping position for the image as a normalized value from -1.0 to 1.0.
|
||||
* @param verticalPosition Vertical alignment or cropping position for the image as a normalized value from -1.0 to 1.0.
|
||||
* @param fitMethod The method to use for fitting the image into the target rectangle. Defaults to `FitMethod.Cover`.
|
||||
* @return A `Pair` of `Rectangle` objects, where the first element is the transformed source rectangle, and the second element is the target rectangle.
|
||||
*/
|
||||
fun Drawer.imageFitSub(
|
||||
img: ColorBuffer,
|
||||
source: Rectangle = img.bounds,
|
||||
target: Rectangle = this.bounds,
|
||||
horizontalPosition: Double = 0.0,
|
||||
verticalPosition: Double = 0.0,
|
||||
fitMethod: FitMethod = FitMethod.Cover
|
||||
): Pair<Rectangle, Rectangle> {
|
||||
val (fitSource, fitTarget) = fitRectangle(
|
||||
source,
|
||||
target,
|
||||
horizontalPosition,
|
||||
verticalPosition,
|
||||
fitMethod
|
||||
)
|
||||
|
||||
image(img, fitSource, fitTarget)
|
||||
return Pair(source, target)
|
||||
}
|
||||
28
orx-image-fit/src/jvmDemo/kotlin/DemoImageFitSub01.kt
Normal file
28
orx-image-fit/src/jvmDemo/kotlin/DemoImageFitSub01.kt
Normal file
@@ -0,0 +1,28 @@
|
||||
import org.openrndr.application
|
||||
import org.openrndr.draw.loadImage
|
||||
import org.openrndr.extra.imageFit.imageFitSub
|
||||
|
||||
import org.openrndr.extra.noise.shapes.uniformSub
|
||||
import org.openrndr.extra.shapes.primitives.grid
|
||||
import kotlin.random.Random
|
||||
|
||||
fun main() = application {
|
||||
configure {
|
||||
width = 720
|
||||
height = 720
|
||||
}
|
||||
program {
|
||||
val image = loadImage("demo-data/images/image-001.png")
|
||||
extend {
|
||||
val grid = drawer.bounds.grid(5, 5).flatten()
|
||||
val r = Random(seconds.toInt())
|
||||
for (cell in grid) {
|
||||
drawer.imageFitSub(
|
||||
image,
|
||||
image.bounds.uniformSub(0.25, 0.75, 0.25, 0.75, random = r),
|
||||
cell
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user