Added a Scanner and Side Scanner Class and a scanning package;

everything in the scanning package is internal stuff
This commit is contained in:
Paul Schaller 2023-11-18 14:49:06 +01:00
parent 1b56dd47f0
commit b750ae9344
5 changed files with 236 additions and 2 deletions

View File

@ -0,0 +1,203 @@
package com.cringe_studios.christmastreescanning;
import java.awt.image.BufferedImage;
public class Scanner {
BufferedImage frontSideImages[];
BufferedImage frontSideImagesRed[];
BufferedImage frontSideImagesGreen[];
BufferedImage frontSideImagesBlue[];
BufferedImage rightSideImages[];
BufferedImage rightSideImagesRed[];
BufferedImage rightSideImagesGreen[];
BufferedImage rightSideImagesBlue[];
BufferedImage behindSideImages[];
BufferedImage behindSideImagesRed[];
BufferedImage behindSideImagesGreen[];
BufferedImage behindSideImagesBlue[];
BufferedImage leftSideImages[];
BufferedImage leftSideImagesRed[];
BufferedImage leftSideImagesGreen[];
BufferedImage leftSideImagesBlue[];
byte gammaDelta = 0;
Boolean distinctColorChannels = null; // use the non-primitive datatype, so the user has to set the state
Boolean sideCount = null; // use the non-primitive datatype, so the user has to set the state
public Scanner() {}
public Point3D[] scan() {
if(distinctColorChannels == null || sideCount == null); //TODO error
Point3D[] ret;
if(distinctColorChannels == true && sideCount == true) {
}else if(distinctColorChannels == true && sideCount == false) {
}else if(distinctColorChannels == false && sideCount == true) {
}else if(distinctColorChannels == false && sideCount == false) {
}
return null;
}
public void setData(ScannerData dataType, BufferedImage images[]) {
if(distinctColorChannels == null || sideCount == null); //TODO error
if(distinctColorChannels.booleanValue() == false) {
if(dataType.ordinal() >= ScannerData.IMAGE_FRONT_RED.ordinal() && dataType.ordinal() <= ScannerData.IMAGE_LEFT_BLUE.ordinal()); //TODO error
if(sideCount.booleanValue() == false) {
switch (dataType){
case IMAGE_FRONT:
{
frontSideImages = images;
break;
}
case IMAGE_RIGHT:
{
rightSideImages = images;
break;
}
case IMAGE_BEHIND:
case IMAGE_LEFT:
default:
//TODO error
}
}else {
switch (dataType){
case IMAGE_FRONT:
{
frontSideImages = images;
break;
}
case IMAGE_RIGHT:
{
rightSideImages = images;
break;
}
case IMAGE_BEHIND:
{
behindSideImages = images;
break;
}
case IMAGE_LEFT:
{
leftSideImages = images;
break;
}
default:
//TODO error
}
}
}else{
if(dataType.ordinal() >= ScannerData.IMAGE_FRONT.ordinal() && dataType.ordinal() <= ScannerData.IMAGE_LEFT.ordinal()); //TODO error
if(sideCount.booleanValue() == false) {
if(dataType.ordinal() >= ScannerData.IMAGE_BEHIND_RED.ordinal() && dataType.ordinal() <= ScannerData.IMAGE_LEFT_BLUE.ordinal()){
//Todo error
}
}
switch (dataType) {
case IMAGE_FRONT_RED:
{
frontSideImagesRed = images;
break;
}
case IMAGE_FRONT_GREEN:
{
frontSideImagesGreen = images;
break;
}
case IMAGE_FRONT_BLUE:
{
frontSideImagesBlue = images;
break;
}
case IMAGE_RIGHT_RED:
{
rightSideImagesRed = images;
break;
}
case IMAGE_RIGHT_GREEN:
{
rightSideImagesGreen = images;
break;
}
case IMAGE_RIGHT_BLUE:
{
rightSideImagesBlue = images;
break;
}
case IMAGE_BEHIND_RED:
{
behindSideImagesRed = images;
break;
}
case IMAGE_BEHIND_GREEN:
{
behindSideImagesGreen = images;
break;
}
case IMAGE_BEHIND_BLUE:
{
behindSideImagesBlue = images;
break;
}
case IMAGE_LEFT_RED:
{
leftSideImagesRed = images;
break;
}
case IMAGE_LEFT_GREEN:
{
leftSideImagesGreen = images;
break;
}
case IMAGE_LEFT_BLUE:
{
leftSideImagesBlue = images;
break;
}
default:
//TODO error
}
}
}
/**
* Sets how many of the brightests pixels are looked for in the images
* @param gammaDelta the new gammaDeltaValue, default is 0 (only the brightest pixels)
*/
public void setGammaDelta(byte gammaDelta) {
this.gammaDelta = gammaDelta;
}
/**
*
* @param useDistinctRGBImages if this parameter is true, you have to use the IMAGE_*_RED/_GREEN/_BLUE enum types in the setData method
*/
public void setDistinctColorChannels(boolean useDistinctRGBImages) {
this.distinctColorChannels = Boolean.valueOf(useDistinctRGBImages);
}
/**
*
* @param useAllFourSides if this Parameter is true, you have to give images for all sides with the "setData" method, if false, you may only give two sides: front and right
*/
public void setSideCount(boolean useAllFourSides) {
this.sideCount = Boolean.valueOf(useAllFourSides);
}
}

View File

@ -0,0 +1,24 @@
package com.cringe_studios.christmastreescanning;
public enum ScannerData{
IMAGE_FRONT_RED,
IMAGE_FRONT_GREEN,
IMAGE_FRONT_BLUE,
IMAGE_RIGHT_RED,
IMAGE_RIGHT_GREEN,
IMAGE_RIGHT_BLUE,
IMAGE_BEHIND_RED,
IMAGE_BEHIND_GREEN,
IMAGE_BEHIND_BLUE,
IMAGE_LEFT_RED,
IMAGE_LEFT_GREEN,
IMAGE_LEFT_BLUE,
IMAGE_FRONT,
IMAGE_RIGHT,
IMAGE_BEHIND,
IMAGE_LEFT
}

View File

@ -1,4 +1,4 @@
package com.cringe_studios.christmastreescanning;
package com.cringe_studios.christmastreescanning.scanning;
import java.awt.Color;
import java.awt.Point;
@ -7,6 +7,8 @@ import java.awt.image.BufferedImage;
import java.util.ArrayList;
import java.util.List;
import com.cringe_studios.christmastreescanning.Point3D;
public class ChristmasTreeScanning {
//TODO maybe use Point2D.Double as return type, so the Points don't have to be converted to Points2D later down the pipeline during the normalization step
private Point getBrightestSpotGrayscale(BufferedImage grayScaleImage, byte gammaDelta) {

View File

@ -1,4 +1,4 @@
package com.cringe_studios.christmastreescanning;
package com.cringe_studios.christmastreescanning.scanning;
import java.awt.Point;

View File

@ -0,0 +1,5 @@
package com.cringe_studios.christmastreescanning.scanning;
public class SideScanner {
}