Jump to content

Reptillian

Members
  • Posts

    1,236
  • Joined

  • Last visited

  • Days Won

    18

Everything posted by Reptillian

  1. There isn't, but you are welcome to dive into the source code and try to enable it.
  2. I see only binary options there. Checked or is not checked. No way to use conditions like Variable==4.
  3. It is based on an actual fractal. The initial step was Diffusion Limited Aggregation which is a g'mic filter I have made.
  4. I have a question with regards to Codelab. Right now this works DoubleSliderControl Something = 1; // [0,1] {Variable} Red Weight However, this does not. DoubleSliderControl Something = 1; // [0,1] {Variable!=5} Red Weight What would be the solution?
  5. Krita can open ora file. That is why I suggested lazpaint. Batch convert pdn to ora, import to Krita.
  6. You can do batch processing with cli via LazPaint. LazPaint can be used to convert pdn files into ora file, then you can open them in Krita. Also, if planning to use Paint.NET, I would use .ORA instead, there's no info loss for me there and it opens up in more programs.
  7. Might has to do with old service. Win 7 still is supported?
  8. Modulos Operation has been upgraded. Essentially a more advanced version of the plugin I created. So, if anyone wants more option to that plugin, I will direct them to this filter instead. https://github.com/dtschump/gmic-community/commit/e6bc8afacaf673e37bbc4d4aa5af2ce0566231de
  9. A more advanced version of the plugin I have updated is coming to g'mic-qt. I'm not updating the c# version as it's easier to add multiple color space as well as doing other things within g'mic-qt. As you can see, you can blend layers' channels individually or do modulus operation with a number. And this with the option of using different values per channels per 2 layers. The top one is RGB, and the bottom one is HSV.
  10. EDIT : Solved. I want to leave this thread open if anyone has any feedback. // Name: Image Modulo Toolkit // Submenu: Adjustment // Author: Reptorian // Title: Image Modulo Toolkit // Version: 2 // Desc: Adjust image values based on I%(Amount+1) // Keywords: Modulo // URL: // Help: #region UICode ListBoxControl<ModuloMode> moduloMode = ModuloMode.Modulo; // Mode | Modulo | Modulo Continuous | Divisive Modulo | Divisive Modulo Continuous | Modulo Addition | Modulo Addition Continuous IntSliderControl maxNumber = 255; // [1,255] {!ClipboardMode} Maximum Number CheckboxControl ClipboardMode = false; // Use Clipboard CheckboxControl Negate = false;// Invert #endregion // Aux surface Surface aux = null; Surface ModVal = null; private Surface clipboardSurface = null; private bool readClipboard = false; protected override void OnDispose(bool disposing) { if (disposing) { // Release any surfaces or effects you've created if (aux != null) aux.Dispose(); aux = null; if (clipboardSurface != null) clipboardSurface.Dispose(); clipboardSurface = null; } base.OnDispose(disposing); } // This single-threaded function is called after the UI changes and before the Render function is called // The purpose is to prepare anything you'll need in the Render function void PreRender(Surface dst, Surface src) { int R1,G1,B1,R2,G2,B2; ColorBgra CurrentPixel; ColorBgra ClipPixel; ModVal = new Surface(src.Size); float DivMultR,DivMultG,DivMultB,DivMultClipR,DivMultClipG,DivMultClipB; int maxR,maxG,maxB,maxClipR,maxClipG,maxClipB; DivMultR = DivMultG = DivMultB = DivMultClipR = DivMultClipG = DivMultClipB = 255f/maxNumber; maxR = maxG = maxB = maxClipR = maxClipG = maxClipB = maxNumber; R1 = G1 = B1 = R2 = G2 = B2 = 255; if (aux == null) { aux = new Surface(src.Size); } if (!readClipboard && ClipboardMode) { readClipboard = true; clipboardSurface = Services.GetService<IClipboardService>().TryGetSurface(); } // Copy from the Clipboard to the aux surface for (int y = 0; y < aux.Size.Height; y++) { if (IsCancelRequested) return; for (int x = 0; x < aux.Size.Width; x++) { CurrentPixel = src[x, y]; int R = CurrentPixel.R; int G = CurrentPixel.G; int B = CurrentPixel.B; if (readClipboard){ if (clipboardSurface != null) { aux[x,y] = clipboardSurface.GetBilinearSampleWrapped(x, y); } else { aux[x,y] = Color.Transparent; } ClipPixel=aux[x,y]; maxClipR = ClipPixel.R > 0 ? ClipPixel.R : 255; maxClipG = ClipPixel.G > 0 ? ClipPixel.G : 255; maxClipB = ClipPixel.B > 0 ? ClipPixel.B : 255; DivMultClipR = 255f / maxClipR; DivMultClipG = 255f / maxClipG; DivMultClipB = 255f / maxClipB; } switch (moduloMode) { case ModuloMode.Modulo: R1 = (byte)(R % (maxR + 1)); G1 = (byte)(G % (maxG + 1)); B1 = (byte)(B % (maxB + 1)); R2 = (byte)(R % (maxClipR + 1)); G2 = (byte)(G % (maxClipG + 1)); B2 = (byte)(B % (maxClipB + 1)); break; case ModuloMode.ModuloContinuous: if (readClipboard){ } int TR1 = R / (maxR + 1); int TG1 = G / (maxG + 1); int TB1 = B / (maxB + 1); R1 = (TR1 % 2 == 1) ? (byte)(maxNumber - (R % (maxR + 1))) : (byte)(R % (maxR + 1)); G1 = (TG1 % 2 == 1) ? (byte)(maxNumber - (G % (maxG + 1))) : (byte)(G % (maxG + 1)); B1 = (TB1 % 2 == 1) ? (byte)(maxNumber - (B % (maxB + 1))) : (byte)(R % (maxB + 1)); int TR2 = R / (maxClipR + 1); int TG2 = G / (maxClipG + 1); int TB2 = B / (maxClipB + 1); R2 = (TR2 % 2 == 1) ? (byte)(maxClipR - (R % (maxClipR + 1))) : (byte)(R % (maxClipR + 1)); G2 = (TG2 % 2 == 1) ? (byte)(maxClipG - (G % (maxClipG + 1))) : (byte)(G % (maxClipG + 1)); B2 = (TB2 % 2 == 1) ? (byte)(maxClipB - (B % (maxClipB + 1))) : (byte)(R % (maxClipB + 1)); break; case ModuloMode.DivisiveModulo: if (maxR != 1) { R1 = (byte)(R * DivMultR);} if (maxG != 1) { G1 = (byte)(G * DivMultG);} if (maxB != 1) { B1 = (byte)(B * DivMultB);} if (maxClipR != 1) { R2 = (byte)(R * DivMultClipR);} if (maxClipG != 1) { G2 = (byte)(G * DivMultClipG);} if (maxClipB != 1) { B2 = (byte)(B * DivMultClipB);} break; case ModuloMode.DivisiveModuloContinuous: if (maxR != 1){ float MR1 = R * DivMultR; int CR21 = (int)(MR1 / 256); R1 = (CR21 % 2 == 0) ? (int)(MR1) % 256 : 255 - ((int)(MR1) % 256);} if (maxG != 1){ float MG1 = G * DivMultG; int CG21 = (int)(MG1 / 256); G1 = (CG21 % 2 == 0) ? (int)(MG1) % 256 : 255 - ((int)(MG1) % 256);} if (maxB != 1){ float MB1 = B * DivMultB; int CB21 = (int)(MB1 / 256); B1 = (CB21 % 2 == 0) ? (int)(MB1) % 256 : 255 - ((int)(MB1) % 256);} if (maxClipR != 1){ float MR2 = R * DivMultClipR; int CR22 = (int)(MR2 / 256); R2 = (CR22 % 2 == 0) ? (int)(MR2) % 256 : 255 - ((int)(MR2) % 256);} if (maxClipG != 1){ float MG2 = G * DivMultClipG; int CG22 = (int)(MG2 / 256); G2 = (CG22 % 2 == 0) ? (int)(MG2) % 256 : 255 - ((int)(MG2) % 256);} if (maxClipB != 1){ float MB2 = B * DivMultClipB; int CB22 = (int)(MB2 / 256); B2 = (CB22 % 2 == 0) ? (int)(MB2) % 256 : 255 - ((int)(MB2) % 256);} break; case ModuloMode.ModuloAddition: R1 = (byte)((R + maxR) % 256); G1 = (byte)((G + maxG) % 256); B1 = (byte)((B + maxB) % 256); R2 = (byte)((R + maxClipR) % 256); G2 = (byte)((G + maxClipG) % 256); B2 = (byte)((B + maxClipB) % 256); break; case ModuloMode.ModuloAdditionContinuous: R1 = ((R + maxR) > 255) ? (int)(255 - (R + maxR) % 256) : R + maxR; G1 = ((G + maxG) > 255) ? (int)(255 - (G + maxG) % 256) : G + maxG; B1 = ((B + maxB) > 255) ? (int)(255 - (B + maxB) % 256) : B + maxB; R2 = ((R + maxClipR) > 255) ? (int)(255 - (R + maxClipR) % 256) : R + maxClipR; G2 = ((G + maxClipG) > 255) ? (int)(255 - (G + maxClipG) % 256) : G + maxClipG; B2 = ((B + maxClipB) > 255) ? (int)(255 - (B + maxClipB) % 256) : B + maxClipB; break; } if(Negate){ R1 = 255 - R1; G1 = 255 - G1; B1 = 255 - B1; R2 = 255 - R1; G2 = 255 - G1; B2 = 255 - B1; } ModVal[x,y] = ColorBgra.FromBgraClamped(B1, G1, R1, CurrentPixel.A); aux[x,y] = ColorBgra.FromBgraClamped(B2, G2, R2, CurrentPixel.A); } } } void Render(Surface dst, Surface src, Rectangle rect) { ColorBgra CurrentPixel; // Step through each row of the current rectangle for (int y = rect.Top; y < rect.Bottom; y++) { if (IsCancelRequested) return; // Step through each pixel on the current row of the rectangle for (int x = rect.Left; x < rect.Right; x++) { ColorBgra ModPixel = ModVal[x,y]; ColorBgra AuxPixel = aux[x,y]; if (ClipboardMode){CurrentPixel = AuxPixel;} else {CurrentPixel = ModPixel;} dst[x,y] = CurrentPixel; } } } enum ModuloMode { Modulo, ModuloContinuous, DivisiveModulo, DivisiveModuloContinuous, ModuloAddition, ModuloAdditionContinuous }
  11. Just checked again. It did work. I guess there's no issues.
  12. This is not my work, so I will post here. @G'MIC has created a new filter that can generate image based on random functions. I thought you guys should know about this.
  13. The russian link doesn't work to my knowledge. That's the link the person is referring to.
  14. These effects are generally achieved by manually creating the areas (likely in vector format since you can manipulate lines easier with it). Theoretically, you can achieve better results than what you did using anisotropic smoothing based on partial differential equations, and inpainting. I don't know how to describe that in terms of c# or more clearer, but it's something to look into if you want better result. Regardless I like the result, but making it better would take a lot of time, and a lot of research.
  15. Well, I just pushed the filter now that you returned. https://github.com/dtschump/gmic-community/commit/6dce478f4be69ff9dff0ef2edb34ee08278fe915 That's for the g'mic-qt plugin.
  16. Update on RPG Tiler Tool. I added undo state for row/column editing mode. Now, if you delete row/column, you can undo. If you shift row/column, you can undo. I think I know how to do multiple undos for the tool though that would take a lot of time. I just would need to create 3-dimensional image containing changes done to the image, and work with that. That would take time if I can bother with it. Update takes time to come to g'mic. Check by hour, then a day.
  17. I tested Chirikov-Taylor on G'MIC-QT 2.9.2. As some of you noticed, there is a error that says this: expr is only available on g'mic-qt 2.9.3 and higher. So, this cannot be used. I don't test my filters on pdn since krita and gimp takes priority since gmic-qt are almost always updated in those.
  18. New Filter! - Chirikov Additional comment: Right now, I would say that this is practical for use though preview isn't always accurate. This is based off Chirikov Standard Map, and I have implemented the symmetry modification after reading a paper made by Artur I.Karimov, Denis N. Butusov, Vyacheslav G. Rybin, Timur I. Karimov within Department of Computer Aided Design at Saint Petersburg Electrotechnical University. Furthermore, this isn't limited to square ratios, and you have so many different ways of coloring. Just a note : Coloring based on last image is a TODO.
  19. Decided to try to generate Chirikov-Taylor Standard Map. A preview $ rep_chirikov_taylor_map 5000,20000,pi/3,3610,1 n. 0,359.999 +f. i?1 . . *. 255 a c hsv2rgb r 500,500,100%,100%,5 For plugin authors:
  20. If there isn't a plugin or filter within plugins, then it needs to be coded. This does not look too hard to do, but wouldn't do it myself.
  21. On Krita, you do have the option to use plenty of filters that are very similar to plugins for Paint.NET by using G'MIC-QT. If you could name a couple, I could find you similar filters over there, and some has the same names such as Nebulous. A good filters of mine are already based on PDN plugins.
  22. If you updated the filter now and see nothing, check by a day. Otherwise: I added Fill Tool to Non-Isometric Tiler filter. Please read instruction to see how to use it. I have not enabled the fill for symmetry mode just yet and probably won't do so for some time. In most cases, you don't need to fill with symmetry conditions, and the current painting with symmetry mode does that job anyway if careful.
×
×
  • Create New...