private Mat AlphaBlending(Mat data, int posX, int posY) { var dataWidth = data.Size().Width; var dataHeight = data.Size().Height; var dataToBeFilled = new Scalar(0, 0, 0, 0); Mat newMat; newMat = data.CopyMakeBorder( top: posY, bottom: SceneSize.Height - dataHeight - posY, left: posX, right: SceneSize.Width - dataWidth - posX, borderType: BorderTypes.Constant, value: dataToBeFilled ); if (PreLoadedMats != null) { PreLoadedMats.MoveNext(); var baseimg = PreLoadedMats.Current; var newalpha = newMat.Split()[3]; Mat background = new Mat(SceneSize, MatType.CV_8UC3, 0); Mat foreground = new Mat(SceneSize, MatType.CV_8UC3, 0); Mat alpha = new Mat(SceneSize, MatType.CV_8UC3, 0); baseimg = baseimg.CvtColor(ColorConversionCodes.RGBA2RGB); baseimg.ConvertTo(background, MatType.CV_8UC3); newMat = newMat.CvtColor(ColorConversionCodes.RGBA2RGB); newMat.ConvertTo(foreground, MatType.CV_8UC3); newalpha = newalpha.CvtColor(ColorConversionCodes.RGBA2RGB); newalpha.ConvertTo(alpha, MatType.CV_8UC3); Cv2.Multiply(alpha, foreground, foreground); Cv2.Multiply(1 - (alpha / 255.0), background, background); Cv2.Add(background, foreground, newMat); background.Dispose(); foreground.Dispose(); alpha.Dispose(); BaseMat.Dispose(); newalpha.Dispose(); } else { newMat.CopyTo(BaseMat, newMat.Split()[3]); } return(newMat); }
private void CheckForMaterials() { numColors = (NumColors)EditorGUILayout.EnumPopup("Number of Colors", numColors); if (numColors == NumColors.TwoColors) { EditorGUILayout.BeginHorizontal(); baseMatSel = (BaseMat)EditorGUILayout.EnumPopup("Base Material", baseMatSel); baseMatCol = EditorGUILayout.ColorField(baseMatCol); EditorGUILayout.EndHorizontal(); EditorGUILayout.BeginHorizontal(); borderMatSel = (BorderMat)EditorGUILayout.EnumPopup("Border Material", borderMatSel); borderMatCol = EditorGUILayout.ColorField(borderMatCol); EditorGUILayout.EndHorizontal(); if (!baseMat) { baseMat = new Material(Shader.Find("Diffuse")); AssetDatabase.CreateAsset(baseMat, "Assets/newBaseMaterial.mat"); } if (!borderMat) { borderMat = new Material(Shader.Find("Diffuse")); AssetDatabase.CreateAsset(borderMat, "Assets/newBorderMaterial.mat"); } if (baseMatSel == BaseMat.Wood) { if (baseMat.mainTexture != tcmPrefabs.baseWood) { baseMat.mainTexture = tcmPrefabs.baseWood; } } else { if (baseMat.mainTexture != tcmPrefabs.baseMetal) { baseMat.mainTexture = tcmPrefabs.baseMetal; } } if (borderMatSel == BorderMat.Wood) { if (borderMat.mainTexture != tcmPrefabs.borderWood) { borderMat.mainTexture = tcmPrefabs.borderWood; } } else { if (borderMat.mainTexture != tcmPrefabs.borderMetal) { borderMat.mainTexture = tcmPrefabs.borderMetal; } } AddMaterials(baseMat, borderMat, baseMat, borderMat, baseMatCol, borderMatCol, baseMatCol, borderMatCol); } else { EditorGUILayout.BeginHorizontal(); topBaseMatSel = (TopBaseMat)EditorGUILayout.EnumPopup("Top Base Material", topBaseMatSel); topBaseMatCol = EditorGUILayout.ColorField(topBaseMatCol); EditorGUILayout.EndHorizontal(); EditorGUILayout.BeginHorizontal(); topBorderMatSel = (TopBorderMat)EditorGUILayout.EnumPopup("Top Border Material", topBorderMatSel); topBorderMatCol = EditorGUILayout.ColorField(topBorderMatCol); EditorGUILayout.EndHorizontal(); EditorGUILayout.BeginHorizontal(); bottomBaseMatSel = (BottomBaseMat)EditorGUILayout.EnumPopup("Bottom Base Material", bottomBaseMatSel); bottomBaseMatCol = EditorGUILayout.ColorField(bottomBaseMatCol); EditorGUILayout.EndHorizontal(); EditorGUILayout.BeginHorizontal(); bottomBorderMatSel = (BottomBorderMat)EditorGUILayout.EnumPopup("Bottom Border Material", bottomBorderMatSel); bottomBorderMatCol = EditorGUILayout.ColorField(bottomBorderMatCol); EditorGUILayout.EndHorizontal(); if (!topBaseMat) { topBaseMat = new Material(Shader.Find("Diffuse")); AssetDatabase.CreateAsset(topBaseMat, "Assets/newTopBaseMaterial.mat"); } if (!topBorderMat) { topBorderMat = new Material(Shader.Find("Diffuse")); AssetDatabase.CreateAsset(topBorderMat, "Assets/newTopBorderMaterial.mat"); } if (!bottomBaseMat) { bottomBaseMat = new Material(Shader.Find("Diffuse")); AssetDatabase.CreateAsset(bottomBaseMat, "Assets/newBottomBaseMaterial.mat"); } if (!bottomBorderMat) { bottomBorderMat = new Material(Shader.Find("Diffuse")); AssetDatabase.CreateAsset(bottomBorderMat, "Assets/newBottomBorderMaterial.mat"); } if (topBaseMatSel == TopBaseMat.Wood) { if (topBaseMat.mainTexture != tcmPrefabs.baseWood) { topBaseMat.mainTexture = tcmPrefabs.baseWood; } } else { if (topBaseMat.mainTexture != tcmPrefabs.baseMetal) { topBaseMat.mainTexture = tcmPrefabs.baseMetal; } } if (topBorderMatSel == TopBorderMat.Wood) { if (topBorderMat.mainTexture != tcmPrefabs.borderWood) { topBorderMat.mainTexture = tcmPrefabs.borderWood; } } else { if (topBorderMat.mainTexture != tcmPrefabs.borderMetal) { topBorderMat.mainTexture = tcmPrefabs.borderMetal; } } if (bottomBaseMatSel == BottomBaseMat.Wood) { if (bottomBaseMat.mainTexture != tcmPrefabs.baseWood) { bottomBaseMat.mainTexture = tcmPrefabs.baseWood; } } else { if (bottomBaseMat.mainTexture != tcmPrefabs.baseMetal) { bottomBaseMat.mainTexture = tcmPrefabs.baseMetal; } } if (bottomBorderMatSel == BottomBorderMat.Wood) { if (bottomBorderMat.mainTexture != tcmPrefabs.borderWood) { bottomBorderMat.mainTexture = tcmPrefabs.borderWood; } } else { if (bottomBorderMat.mainTexture != tcmPrefabs.borderMetal) { bottomBorderMat.mainTexture = tcmPrefabs.borderMetal; } } AddMaterials(topBaseMat, topBorderMat, bottomBaseMat, bottomBorderMat, topBaseMatCol, topBorderMatCol, bottomBaseMatCol, bottomBorderMatCol); } }