Add non-linear outline

This commit is contained in:
2026-09-29 12:06:44 +02:00
parent fa9887051b
commit 2d417990ec
10 changed files with 473 additions and 5 deletions

View File

@@ -0,0 +1,14 @@
package presenters.outline;
import domain.image.Image;
public interface NonLinearOutlineListener {
void onErosionGradientChanged(Image image);
void onDilationGradientChanged(Image image);
void onBeucherGradientChanged(Image image);
void onNonLinearLaplacianChanged(Image image);
}

View File

@@ -0,0 +1,99 @@
package presenters.outline;
import app.state.AppState;
import app.state.NonLinearOutlineState;
import domain.image.Image;
import jakarta.inject.Inject;
import services.OutlineService;
import ui.abstractions.INonLinearOutlineView;
public class NonLinearOutlinePresenter implements NonLinearOutlineListener {
private final AppState appState;
private final NonLinearOutlineState outlineState;
private final OutlineService outlineService;
private INonLinearOutlineView view;
@Inject
public NonLinearOutlinePresenter(
AppState appState,
NonLinearOutlineState outlineState,
OutlineService outlineService
) {
this.appState = appState;
this.outlineState = outlineState;
this.outlineService = outlineService;
outlineState.subscribe(this);
}
public void setView(INonLinearOutlineView view) {
this.view = view;
}
public void dispose() {
view = null;
outlineState.unsubscribe(this);
}
public void computeErosionGradient() {
Image image = appState.getImage();
Image result = outlineService.gradientErosion(image);
outlineState.setErosionGradient(result);
}
public void computeDilationGradient() {
Image image = appState.getImage();
Image result = outlineService.gradientDilation(image);
outlineState.setDilationGradient(result);
}
public void computeBeucherGradient() {
Image image = appState.getImage();
Image result = outlineService.beucherGradient(image);
outlineState.setBeucherGradient(result);
}
public void computeNonLinearLaplacian() {
Image image = appState.getImage();
Image result = outlineService.nonLinearLaplacian(image);
outlineState.setNonLinearLaplacian(result);
}
@Override
public void onErosionGradientChanged(Image image) {
if (view != null) {
view.updateErosionGradient(image);
}
}
@Override
public void onDilationGradientChanged(Image image) {
if (view != null) {
view.updateDilationGradient(image);
}
}
@Override
public void onBeucherGradientChanged(Image image) {
if (view != null) {
view.updateBeucherGradient(image);
}
}
@Override
public void onNonLinearLaplacianChanged(Image image) {
if (view != null) {
view.updateNonLinearLaplacian(image);
}
}
}