|
@@ -281,34 +281,36 @@ namespace WingAIDiagnosisService.URMManage
|
|
|
SKImageInfo info = new SKImageInfo(ScreenWidth, ScreenHeight, SKColorType.Bgra8888, SKAlphaType.Unpremul);
|
|
|
|
|
|
// Create an SKBitmap with the given SKImageInfo
|
|
|
- SKBitmap skBitmap = new SKBitmap(info);
|
|
|
- // Copy the pixel data from the imagePixels array to the SKBitmap
|
|
|
- using (SKImage skImage = SKImage.FromPixelCopy(info, imagePixels))
|
|
|
+ using (SKBitmap skBitmap = new SKBitmap(info))
|
|
|
{
|
|
|
- skImage?.ReadPixels(skBitmap.Info, skBitmap.GetPixels(), skBitmap.RowBytes, 0, 0);
|
|
|
- if (Mixflag == 1)
|
|
|
+ // Copy the pixel data from the imagePixels array to the SKBitmap
|
|
|
+ using (SKImage skImage = SKImage.FromPixelCopy(info, imagePixels))
|
|
|
{
|
|
|
- for (int y = 0; y < skBitmap.Height; y++)
|
|
|
+ skImage?.ReadPixels(skBitmap.Info, skBitmap.GetPixels(), skBitmap.RowBytes, 0, 0);
|
|
|
+ if (Mixflag == 1)
|
|
|
{
|
|
|
- for (int x = 0; x < skBitmap.Width; x++)
|
|
|
+ for (int y = 0; y < skBitmap.Height; y++)
|
|
|
{
|
|
|
- SKColor pixelColor = skBitmap.GetPixel(x, y);
|
|
|
-
|
|
|
- if (pixelColor.Alpha == 255 && pixelColor.Red == 0 && pixelColor.Green == 0 && pixelColor.Blue == 0)
|
|
|
+ for (int x = 0; x < skBitmap.Width; x++)
|
|
|
{
|
|
|
- SKColor modifiedColor = new SKColor(0, 0, 0, 128); // 将全黑像素设置为50%透明
|
|
|
- skBitmap.SetPixel(x, y, modifiedColor);
|
|
|
+ SKColor pixelColor = skBitmap.GetPixel(x, y);
|
|
|
+
|
|
|
+ if (pixelColor.Alpha == 255 && pixelColor.Red == 0 && pixelColor.Green == 0 && pixelColor.Blue == 0)
|
|
|
+ {
|
|
|
+ SKColor modifiedColor = new SKColor(0, 0, 0, 128); // 将全黑像素设置为50%透明
|
|
|
+ skBitmap.SetPixel(x, y, modifiedColor);
|
|
|
+ }
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
- }
|
|
|
- using (var image = SKImage.FromBitmap(skBitmap))
|
|
|
- using (var data = image.Encode(SKEncodedImageFormat.Png, 100))
|
|
|
- {
|
|
|
- byte[] imageBytes = data.ToArray();
|
|
|
- string base64String = Convert.ToBase64String(imageBytes);
|
|
|
- return base64String;
|
|
|
+ using (var image = SKImage.FromBitmap(skBitmap))
|
|
|
+ using (var data = image.Encode(SKEncodedImageFormat.Png, 100))
|
|
|
+ {
|
|
|
+ byte[] imageBytes = data.ToArray();
|
|
|
+ string base64String = Convert.ToBase64String(imageBytes);
|
|
|
+ return base64String;
|
|
|
+ }
|
|
|
}
|
|
|
}
|
|
|
|
|
@@ -403,18 +405,20 @@ namespace WingAIDiagnosisService.URMManage
|
|
|
SKImageInfo info = new SKImageInfo(ScreenWidth, ScreenHeight, SKColorType.Bgra8888, SKAlphaType.Unpremul);
|
|
|
|
|
|
// Create an SKBitmap with the given SKImageInfo
|
|
|
- SKBitmap skBitmap = new SKBitmap(info);
|
|
|
- // Copy the pixel data from the imagePixels array to the SKBitmap
|
|
|
- using (SKImage skImage = SKImage.FromPixelCopy(info, imagePixels))
|
|
|
- {
|
|
|
- skImage.ReadPixels(skBitmap.Info, skBitmap.GetPixels(), skBitmap.RowBytes, 0, 0);
|
|
|
- }
|
|
|
- using (var image = SKImage.FromBitmap(skBitmap))
|
|
|
- using (var data = image.Encode(SKEncodedImageFormat.Png, 100))
|
|
|
+ using (SKBitmap skBitmap = new SKBitmap(info))
|
|
|
{
|
|
|
- byte[] imageBytes = data.ToArray();
|
|
|
- string base64String = Convert.ToBase64String(imageBytes);
|
|
|
- return base64String;
|
|
|
+ // Copy the pixel data from the imagePixels array to the SKBitmap
|
|
|
+ using (SKImage skImage = SKImage.FromPixelCopy(info, imagePixels))
|
|
|
+ {
|
|
|
+ skImage.ReadPixels(skBitmap.Info, skBitmap.GetPixels(), skBitmap.RowBytes, 0, 0);
|
|
|
+ }
|
|
|
+ using (var image = SKImage.FromBitmap(skBitmap))
|
|
|
+ using (var data = image.Encode(SKEncodedImageFormat.Png, 100))
|
|
|
+ {
|
|
|
+ byte[] imageBytes = data.ToArray();
|
|
|
+ string base64String = Convert.ToBase64String(imageBytes);
|
|
|
+ return base64String;
|
|
|
+ }
|
|
|
}
|
|
|
}
|
|
|
|
|
@@ -436,94 +440,96 @@ namespace WingAIDiagnosisService.URMManage
|
|
|
{
|
|
|
SKImageInfo info = new SKImageInfo(10, 128, SKColorType.Bgra8888, SKAlphaType.Unpremul);
|
|
|
// Create an SKBitmap with the given SKImageInfo
|
|
|
- SKBitmap bitmap = new SKBitmap(info);
|
|
|
- var res = GetIntPow();
|
|
|
- var ismidecenter = res.Item1;
|
|
|
- var intpow = res.Item2;//通过修改这个值 colorbar的颜色会有变化,视频的话这个是1
|
|
|
- var urmcolormapname = getColormapname((int)_urmType.Current);
|
|
|
- var colorbarTable = GetURMColorMap(urmcolormapname);
|
|
|
- var tablelength = colorbarTable.Length / 4;
|
|
|
- byte[] rgbTable = new byte[tablelength * 3];
|
|
|
- var midlength = tablelength / 2;
|
|
|
- double midpow = Math.Pow((double)(midlength), intpow);
|
|
|
- double maxpow = Math.Pow((double)(tablelength - 1), intpow);
|
|
|
- byte* source = (byte*)colorbarTable.Address;
|
|
|
- for (int i = 0; i < tablelength; i++)
|
|
|
+ using (SKBitmap bitmap = new SKBitmap(info))
|
|
|
{
|
|
|
- int index = i;
|
|
|
- if (ismidecenter)
|
|
|
+ var res = GetIntPow();
|
|
|
+ var ismidecenter = res.Item1;
|
|
|
+ var intpow = res.Item2;//通过修改这个值 colorbar的颜色会有变化,视频的话这个是1
|
|
|
+ var urmcolormapname = getColormapname((int)_urmType.Current);
|
|
|
+ var colorbarTable = GetURMColorMap(urmcolormapname);
|
|
|
+ var tablelength = colorbarTable.Length / 4;
|
|
|
+ byte[] rgbTable = new byte[tablelength * 3];
|
|
|
+ var midlength = tablelength / 2;
|
|
|
+ double midpow = Math.Pow((double)(midlength), intpow);
|
|
|
+ double maxpow = Math.Pow((double)(tablelength - 1), intpow);
|
|
|
+ byte* source = (byte*)colorbarTable.Address;
|
|
|
+ for (int i = 0; i < tablelength; i++)
|
|
|
{
|
|
|
- if (i > midlength)
|
|
|
+ int index = i;
|
|
|
+ if (ismidecenter)
|
|
|
{
|
|
|
- index = (int)(Math.Pow((double)i - midlength, intpow) / midpow * (midlength)) +
|
|
|
- midlength;
|
|
|
+ if (i > midlength)
|
|
|
+ {
|
|
|
+ index = (int)(Math.Pow((double)i - midlength, intpow) / midpow * (midlength)) +
|
|
|
+ midlength;
|
|
|
+ }
|
|
|
+ else if (i < midlength)
|
|
|
+ {
|
|
|
+ index = midlength - (int)(Math.Pow((double)midlength - i, intpow) / midpow *
|
|
|
+ (midlength));
|
|
|
+ }
|
|
|
}
|
|
|
- else if (i < midlength)
|
|
|
+ else
|
|
|
{
|
|
|
- index = midlength - (int)(Math.Pow((double)midlength - i, intpow) / midpow *
|
|
|
- (midlength));
|
|
|
+ index = (int)(Math.Pow((double)i, intpow) / maxpow * (tablelength - 1));
|
|
|
}
|
|
|
- }
|
|
|
- else
|
|
|
- {
|
|
|
- index = (int)(Math.Pow((double)i, intpow) / maxpow * (tablelength - 1));
|
|
|
- }
|
|
|
|
|
|
- if (index < 0)
|
|
|
- index = 0;
|
|
|
- if (index > tablelength - 1)
|
|
|
- index = tablelength - 1;
|
|
|
- byte r = (byte)source[4 * index + 2];
|
|
|
- byte g = (byte)source[4 * index + 1];
|
|
|
- byte b = (byte)source[4 * index];
|
|
|
- rgbTable[i * 3] = r;
|
|
|
- rgbTable[i * 3 + 1] = g;
|
|
|
- rgbTable[i * 3 + 2] = b;
|
|
|
- }
|
|
|
- // Different platforms have different color formats,
|
|
|
- // such as ARGB for Windows and ABGR for Android.
|
|
|
- // So by default its default value is TRUE, which is FALSE on Android
|
|
|
- bool isArgbFormat = (ServiceManager.Os != VinnoOsPlatform.Android);
|
|
|
-
|
|
|
- int height = bitmap.Height;
|
|
|
- int width = bitmap.Width;
|
|
|
- SKColor* pixels = (SKColor*)bitmap.GetPixels();
|
|
|
- for (int y = 0; y < height; y++)
|
|
|
- {
|
|
|
- int col = y * tablelength / height;
|
|
|
- int rowStart = (height - 1 - y) * width;
|
|
|
-
|
|
|
- for (int x = 0; x < width; x++)
|
|
|
+ if (index < 0)
|
|
|
+ index = 0;
|
|
|
+ if (index > tablelength - 1)
|
|
|
+ index = tablelength - 1;
|
|
|
+ byte r = (byte)source[4 * index + 2];
|
|
|
+ byte g = (byte)source[4 * index + 1];
|
|
|
+ byte b = (byte)source[4 * index];
|
|
|
+ rgbTable[i * 3] = r;
|
|
|
+ rgbTable[i * 3 + 1] = g;
|
|
|
+ rgbTable[i * 3 + 2] = b;
|
|
|
+ }
|
|
|
+ // Different platforms have different color formats,
|
|
|
+ // such as ARGB for Windows and ABGR for Android.
|
|
|
+ // So by default its default value is TRUE, which is FALSE on Android
|
|
|
+ bool isArgbFormat = (ServiceManager.Os != VinnoOsPlatform.Android);
|
|
|
+
|
|
|
+ int height = bitmap.Height;
|
|
|
+ int width = bitmap.Width;
|
|
|
+ SKColor* pixels = (SKColor*)bitmap.GetPixels();
|
|
|
+ for (int y = 0; y < height; y++)
|
|
|
{
|
|
|
- int index = col;
|
|
|
+ int col = y * tablelength / height;
|
|
|
+ int rowStart = (height - 1 - y) * width;
|
|
|
|
|
|
- try
|
|
|
+ for (int x = 0; x < width; x++)
|
|
|
{
|
|
|
- SKColor color;
|
|
|
- if (isArgbFormat)
|
|
|
+ int index = col;
|
|
|
+
|
|
|
+ try
|
|
|
{
|
|
|
- color = new SKColor(rgbTable[index * 3], rgbTable[index * 3 + 1], rgbTable[index * 3 + 2]);
|
|
|
+ SKColor color;
|
|
|
+ if (isArgbFormat)
|
|
|
+ {
|
|
|
+ color = new SKColor(rgbTable[index * 3], rgbTable[index * 3 + 1], rgbTable[index * 3 + 2]);
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ color = new SKColor(rgbTable[index * 3 + 2], rgbTable[index * 3 + 1], rgbTable[index * 3]);
|
|
|
+ }
|
|
|
+
|
|
|
+ pixels[rowStart + x] = color;
|
|
|
}
|
|
|
- else
|
|
|
+ catch (Exception ex)
|
|
|
{
|
|
|
- color = new SKColor(rgbTable[index * 3 + 2], rgbTable[index * 3 + 1], rgbTable[index * 3]);
|
|
|
+ Logger.WriteLineError($"x:{x}, y:{y}, index:{index}, ex:{ex.Message}");
|
|
|
+ throw;
|
|
|
}
|
|
|
-
|
|
|
- pixels[rowStart + x] = color;
|
|
|
- }
|
|
|
- catch (Exception ex)
|
|
|
- {
|
|
|
- Logger.WriteLineError($"x:{x}, y:{y}, index:{index}, ex:{ex.Message}");
|
|
|
- throw;
|
|
|
}
|
|
|
}
|
|
|
- }
|
|
|
- using (var image = SKImage.FromBitmap(bitmap))
|
|
|
- using (var data = image.Encode(SKEncodedImageFormat.Png, 100))
|
|
|
- {
|
|
|
- byte[] imageBytes = data.ToArray();
|
|
|
- string base64String = Convert.ToBase64String(imageBytes);
|
|
|
- return base64String;
|
|
|
+ using (var image = SKImage.FromBitmap(bitmap))
|
|
|
+ using (var data = image.Encode(SKEncodedImageFormat.Png, 100))
|
|
|
+ {
|
|
|
+ byte[] imageBytes = data.ToArray();
|
|
|
+ string base64String = Convert.ToBase64String(imageBytes);
|
|
|
+ return base64String;
|
|
|
+ }
|
|
|
}
|
|
|
}
|
|
|
|