diff --git a/README.md b/README.md index 80247d09..5ce11f73 100644 --- a/README.md +++ b/README.md @@ -52,7 +52,11 @@ In other cases you can contact the developer via email: 1)) { suchey = std::stod(zerlegt[1]); - } + } + if ((toUpper(zerlegt[0]) == "ANTIALIASING") && (zerlegt.size() > 1)) + { + if (toUpper(zerlegt[1]) == "TRUE") + use_antialiasing = true; + } if ((zerlegt.size() == 3) && (anz_ref < 2)) { References[anz_ref].image_file = FormatFileName("/sdcard" + zerlegt[0]); @@ -175,7 +181,10 @@ bool ClassFlowAlignment::doFlow(string time) if ((initalrotate != 0) || initialflip) { - rt.Rotate(initalrotate); + if (use_antialiasing) + rt.RotateAntiAliasing(initalrotate); + else + rt.Rotate(initalrotate); if (SaveAllFiles) AlignAndCutImage->SaveToFile(FormatFileName("/sdcard/img_tmp/rot.jpg")); } diff --git a/code/components/jomjol_flowcontroll/ClassFlowAlignment.h b/code/components/jomjol_flowcontroll/ClassFlowAlignment.h index 180dc7f6..7e1efef7 100644 --- a/code/components/jomjol_flowcontroll/ClassFlowAlignment.h +++ b/code/components/jomjol_flowcontroll/ClassFlowAlignment.h @@ -16,6 +16,7 @@ protected: float initalrotate; bool initialmirror; bool initialflip; + bool use_antialiasing; RefInfo References[2]; int anz_ref; string namerawimage; diff --git a/code/components/jomjol_image_proc/CRotateImage.cpp b/code/components/jomjol_image_proc/CRotateImage.cpp index b6b2321b..96eec7a0 100644 --- a/code/components/jomjol_image_proc/CRotateImage.cpp +++ b/code/components/jomjol_image_proc/CRotateImage.cpp @@ -156,12 +156,140 @@ void CRotateImage::Rotate(float _angle, int _centerx, int _centery) RGBImageRelease(); } + + +void CRotateImage::RotateAntiAliasing(float _angle, int _centerx, int _centery) +{ + int org_width, org_height; + float m[2][3]; + + float x_center = _centerx; + float y_center = _centery; + _angle = _angle / 180 * M_PI; + + if (doflip) + { + org_width = width; + org_height = height; + height = org_width; + width = org_height; + x_center = x_center - (org_width/2) + (org_height/2); + y_center = y_center + (org_width/2) - (org_height/2); + if (ImageOrg) + { + ImageOrg->height = height; + ImageOrg->width = width; + } + } + else + { + org_width = width; + org_height = height; + } + + m[0][0] = cos(_angle); + m[0][1] = sin(_angle); + m[0][2] = (1 - m[0][0]) * x_center - m[0][1] * y_center; + + m[1][0] = -m[0][1]; + m[1][1] = m[0][0]; + m[1][2] = m[0][1] * x_center + (1 - m[0][0]) * y_center; + + if (doflip) + { + m[0][2] = m[0][2] + (org_width/2) - (org_height/2); + m[1][2] = m[1][2] - (org_width/2) + (org_height/2); + } + + int memsize = width * height * channels; + uint8_t* odata; + if (ImageTMP) + { + odata = ImageTMP->RGBImageLock(); + } + else + { + odata = (unsigned char*)GET_MEMORY(memsize); + } + + + int x_source_1, y_source_1, x_source_2, y_source_2; + float x_source, y_source; + float quad_ul, quad_ur, quad_ol, quad_or; + stbi_uc* p_target; + stbi_uc *p_source_ul, *p_source_ur, *p_source_ol, *p_source_or; + + RGBImageLock(); + + for (int x = 0; x < width; ++x) + for (int y = 0; y < height; ++y) + { + p_target = odata + (channels * (y * width + x)); + + x_source = (m[0][0] * x + m[0][1] * y); + y_source = (m[1][0] * x + m[1][1] * y); + + x_source += (m[0][2]); + y_source += (m[1][2]); + + x_source_1 = (int)x_source; + x_source_2 = x_source_1 + 1; + y_source_1 = (int)y_source; + y_source_2 = y_source_1 + 1; + + quad_ul = (x_source_2 - x_source) * (y_source_2 - y_source); + quad_ur = (1- (x_source_2 - x_source)) * (y_source_2 - y_source); + quad_or = (x_source_2 - x_source) * (1-(y_source_2 - y_source)); + quad_ol = (1- (x_source_2 - x_source)) * (1-(y_source_2 - y_source)); + + + if ((x_source_1 >= 0) && (x_source_2 < org_width) && (y_source_1 >= 0) && (y_source_2 < org_height)) + { + p_source_ul = rgb_image + (channels * (y_source_1 * org_width + x_source_1)); + p_source_ur = rgb_image + (channels * (y_source_1 * org_width + x_source_2)); + p_source_or = rgb_image + (channels * (y_source_2 * org_width + x_source_1)); + p_source_ol = rgb_image + (channels * (y_source_2 * org_width + x_source_2)); + for (int _channels = 0; _channels < channels; ++_channels) + { + p_target[_channels] = (int)((float)p_source_ul[_channels] * quad_ul + + (float)p_source_ur[_channels] * quad_ur + + (float)p_source_or[_channels] * quad_or + + (float)p_source_ol[_channels] * quad_ol); + } + } + else + { + for (int _channels = 0; _channels < channels; ++_channels) + p_target[_channels] = 255; + } + } + + // memcpy(rgb_image, odata, memsize); + memCopy(odata, rgb_image, memsize); + + if (!ImageTMP) + { + stbi_image_free(odata); + } + if (ImageTMP) + ImageTMP->RGBImageRelease(); + + RGBImageRelease(); +} + + void CRotateImage::Rotate(float _angle) { // printf("width %d, height %d\n", width, height); Rotate(_angle, width / 2, height / 2); } +void CRotateImage::RotateAntiAliasing(float _angle) +{ +// printf("width %d, height %d\n", width, height); + RotateAntiAliasing(_angle, width / 2, height / 2); +} + void CRotateImage::Translate(int _dx, int _dy) { int memsize = width * height * channels; diff --git a/code/components/jomjol_image_proc/CRotateImage.h b/code/components/jomjol_image_proc/CRotateImage.h index 90ad7d71..4dec78ef 100644 --- a/code/components/jomjol_image_proc/CRotateImage.h +++ b/code/components/jomjol_image_proc/CRotateImage.h @@ -11,7 +11,11 @@ class CRotateImage: public CImageBasis CRotateImage(CImageBasis *_org, CImageBasis *_temp, bool _flip = false); void Rotate(float _angle); + void RotateAntiAliasing(float _angle); + void Rotate(float _angle, int _centerx, int _centery); + void RotateAntiAliasing(float _angle, int _centerx, int _centery); + void Translate(int _dx, int _dy); void Mirror(); }; diff --git a/code/main/version.cpp b/code/main/version.cpp index 06443a23..e996364f 100644 --- a/code/main/version.cpp +++ b/code/main/version.cpp @@ -1,4 +1,4 @@ -const char* GIT_REV="35a9602"; +const char* GIT_REV="60cdee2"; const char* GIT_TAG=""; const char* GIT_BRANCH="rolling"; -const char* BUILD_TIME="2022-06-18 15:11"; \ No newline at end of file +const char* BUILD_TIME="2022-06-26 21:24"; \ No newline at end of file diff --git a/code/version.cpp b/code/version.cpp index 06443a23..f4238673 100644 --- a/code/version.cpp +++ b/code/version.cpp @@ -1,4 +1,4 @@ -const char* GIT_REV="35a9602"; +const char* GIT_REV="60cdee2"; const char* GIT_TAG=""; const char* GIT_BRANCH="rolling"; -const char* BUILD_TIME="2022-06-18 15:11"; \ No newline at end of file +const char* BUILD_TIME="2022-06-26 21:23"; \ No newline at end of file diff --git a/firmware/bootloader.bin b/firmware/bootloader.bin index 6e4dbe38..326b0f43 100644 Binary files a/firmware/bootloader.bin and b/firmware/bootloader.bin differ diff --git a/firmware/dhy0500s3DropOut-10erq.tflite b/firmware/dhy0500s3DropOut-10erq.tflite new file mode 100644 index 00000000..d450e99d Binary files /dev/null and b/firmware/dhy0500s3DropOut-10erq.tflite differ diff --git a/firmware/firmware.bin b/firmware/firmware.bin index c68bc299..32c9de1f 100644 Binary files a/firmware/firmware.bin and b/firmware/firmware.bin differ