• Content count

  • Joined

  • Last visited

  • Days Won


Everything posted by MJW

  1. What is the file format? Does the image actually have more than one layer? Load it into PDN and look at the Layer menu. (If the Layer menu isn't displayed, press the F7 key to display it.) If there are multiple layers, they will be shown by the Layer menu. If it shows only one layer, there is but one.
  2. I'm disappointed there were so few entries in the pocket watch OOTF contest. I thought it was a quite interesting subject. Maybe it required too many separate parts. I know I sort of felt like, "Well I finished that, now I've still got this, and this, and this to do."
  3. I notice several entries in the pocket watch competition have backgrounds. There are few enough entries as it is; we don't need to have any disqualified for not following the rules. I hope the entrants revise their entries. While I'm at it, get better soon Woodsy! I wish you could have submitted a pocket watch entry.
  4. In my opinion, the proportions are much better, but the legs are still too short. An idealized man is about eight heads high, and the waist is somewhere around three and a half heads down. Your version has the waist at the midpoint, which looks a bit low. There are lots of websites that provide information on artistic proportions, but probably the easiest way is to find a photo of an actual man, and use that as a guide.
  5. EDIT: Slightly modified the colors. EDIT 2: Modified (improved, I hope) colors again.
  6. Well done, Drew, lynxster4, and Pixey! Some very imaginative entries. Thanks to Pixey for hosting.
  7. Simmetric, I looked at the code, and now I see the problem. You don't override OnCreateConfigUI at all. I didn't know that could even be done, since I assumed it was the only way to assign the control labels. Apparently IndirectUI uses the property's name if no label is assigned. If I wrote the config code it would look like this: protected override ControlInfo OnCreateConfigUI(PropertyCollection props) { ControlInfo configUI = CreateDefaultConfigUI(props); configUI.SetPropertyControlValue("Text", ControlInfoPropertyNames.DisplayName, "Text"); configUI.SetPropertyControlValue("FontSize", ControlInfoPropertyNames.DisplayName, "Font Size"); configUI.SetPropertyControlValue("LetterSpacing", ControlInfoPropertyNames.DisplayName, "Letter Spacing"); configUI.SetPropertyControlValue("LetterSpacing", ControlInfoPropertyNames.SliderLargeChange, 0.25); configUI.SetPropertyControlValue("LetterSpacing", ControlInfoPropertyNames.SliderSmallChange, 0.05); configUI.SetPropertyControlValue("LetterSpacing", ControlInfoPropertyNames.UpDownIncrement, 0.01); configUI.SetPropertyControlValue("LetterSpacing", ControlInfoPropertyNames.DecimalPlaces, 2); configUI.SetPropertyControlValue("AntiAliasLevel", ControlInfoPropertyNames.DisplayName, "Antialias Level"); configUI.SetPropertyControlValue("FontFamily", ControlInfoPropertyNames.DisplayName, "Font Family"); PropertyControlInfo FamilyControl = configUI.FindControlForPropertyName("FontFamily"); FontFamily[] FontFamilies = new InstalledFontCollection().Families; foreach (FontFamily ff in FontFamilies) { FontFamilyControl.SetValueDisplayName(ff, ff.Name); } configUI.SetPropertyControlValue("Bold", ControlInfoPropertyNames.DisplayName, string.Empty); configUI.SetPropertyControlValue("Bold", ControlInfoPropertyNames.Description, "Bold"); configUI.SetPropertyControlValue("Italic", ControlInfoPropertyNames.DisplayName, string.Empty); configUI.SetPropertyControlValue("Italic", ControlInfoPropertyNames.Description, "Italic"); configUI.SetPropertyControlValue("Underline", ControlInfoPropertyNames.DisplayName, string.Empty); configUI.SetPropertyControlValue("Underline", ControlInfoPropertyNames.Description, "Underline"); configUI.SetPropertyControlValue("Strikeout", ControlInfoPropertyNames.DisplayName, string.Empty); configUI.SetPropertyControlValue("Strikeout", ControlInfoPropertyNames.Description, "Strikeout"); return configUI; } Notes: 1) I haven't tested it, so I there could be typos or other errors. 2) Most of the code was adapted from the code generated by CodeLab. I think that's how many of us learned what to do. 3) I don't understand how the font code I use relates to your version. My version is based on the CodeLab-generated code; beyond that, it's magic to me. (I've never written a plugin that uses a font selector, so I haven't given it much thought.) 4) Apparently the DisplayName code is often unnecessary if the property name is a string. (The property name can be any object. CodeLab uses an enum.) That would mean that the controls like IntSliders don't actually require any code in OnCreateConfigUI. 5) The checkbox configuration sets the DisplayName to an empty string and sets the Description to the label. This results in the control having the label on the same line as the checkbox rather than above it.
  8. Simmetric, the step sizes can be set at the time the controls are configured: configUI.SetPropertyControlValue(name, ControlInfoPropertyNames.SliderSmallChange, mySliderSmallChange); configUI.SetPropertyControlValue(name, ControlInfoPropertyNames.SliderLargeChange, mySliderLargeChange); configUI.SetPropertyControlValue(name, ControlInfoPropertyNames.UpDownIncrement, myUpDownIncrement); configUI.SetPropertyControlValue(name, ControlInfoPropertyNames.DecimalPlaces, myDecimalPlaces);
  9. I've thought about writing a plugin to do that, but haven't gotten around to it. I suggest such a plugin would have ranges for the hue, saturation, and value, and per-component control over how much the values should be concentrated around the center: from being spread equally through the range to being mostly near the original value. The hue range would, of course, have to handle the circular wrap-around. Perhaps there could be a choice of whether the changes are centered at the original value, or only change upward or downward (that might be overkill). The transparency should be preserved, or maybe it could also be randomly alterable. That, too, might be overkill, and would require care not to make an object pixel completely transparent. Each pixel in an object should, I think, have the same modifications, but the modifications should be relative to the pixel's initial color. That would preserve variations within the object. In essence, it would randomly apply the Hue/Saturation Adjustment to each object. There would probably need to be a buffer of flags for whether a particular pixel had been processed, since there's no easy for the fill routine to tell by the state of a pixel whether it had been modified, Maybe I'll try to write such a plugin. If anyone else is interested, they might benefit from my comments about and code from the Average Object Color plugin. Though the code I show is for CodeLab, Visual Studio would be a much better choice. The simplest, and perhaps best, choice is to do most everything in OnSetRenderInfo. The modified version could be created in auxiliary surface. The surface could be initialized to a transparent color (or colors), which would serve as flags for processed pixels (since no pixel within an object is transparent). The Render threads would simply copy the pixels to the dst buffer. A fancier choice is to have an integer buffer the same size as the canvas or selection. As a one-time operation, create numbered images for each object, along with a record for each object which would contain the amount of HSV modifications to apply. Then in OnSetRenderInfo, initialize the modification amounts, and in Render, apply them, using the object-number buffer to identify which object the pixel is in. This allows the fills to be done only once instead of each time a control changes. (In pathological situations, such as a checkerboard of transparent and nontransparent pixels, this could result in quite a large number of object records.) (Humility, plugins can't modify the behavior of the Paint Bucket or any other tool.)
  10. I see Microsoft has released Visual Studio 2017, including a new Community Edition. Being my usual cautious self, I haven't installed it yet. I'd be interested in hearing any opinions or observations about the new version.
  11. Thanks, toe_head2001! I played around with some VS extensions, but I'm not using any now. C# v.7 seems to have some interesting features. The idea of returning multiple values from methods as tuples is something that had occurred to me. In many situations it seems more elegant than rather arbitrarily making one a return value and the others "out" arguments. I'm somewhat surprised to see it actually implemented.
  12. I can only speak for myself, but I really don't think it's necessary. I was just reminding you of the rule, not suggesting you needed to change or delete your comments.
  13. I doubt you need to delete anything. If a comment went so far over the line that it needed to be deleted, a moderator would probably delete it.
  14. If your whole purpose was to obtain physical assistance, then you should reconsider, since asking others to do work for you violates the forum rules:
  15. Rotate/Zoom only handles a small subset of possible perspective transformations. Essentially, the distance from the eye to the rectangle is fixed. It's difficult, if not impossible, to match a given transformation.
  16. I can't see the purpose of having a grid distortion consisting of a bunch of different perspective transformations. What would it be used to do?
  17. Well, you can try things like Stylize>Outline, Artistic>Ink Sketch, or Artistic>Pencil Sketch, but they probably won't produce satisfactory results. It's a difficult problem. People incorporate into drawings not just what they see, but also their knowledge of the objects. A sharp change in brightness can be an edge or it can be a cast shadow. A person knows which it is and draws them differently; the computer program usually has no way of knowing. I've read a number of papers on the subject, which use neural networks and things like that, and most of their results are nothing to write home about. EDIT: Revised it a bit.
  18. Then I'll continue to zip them (as simmetric probably should, also).
  19. You might try Perspective Transformation. One method: Put the sign in a higher layer. Use the Rectangular Selection and the Move Pixel Tool to make the sign fill the entire layer (don't worry if it changes the proportion). Run Distort>Perspective Transformation Carefully place the corners on an area of the fence that corresponds to a rectangle (at least as large as you want the sign to be), using the fence rails as a guide. (It might help to temporarily decrease the opacity of the sign layer so it's semi-transparent.) Adjust the location, size, and proportion of the sign using the X and Y Offsets, the Scale, and the XY Proportion.
  20. Another problem is the proportions. The legs are way too short. An average person's waist is above the center line. In the sprite, it's well below. I don't necessarily expect a cartoon-like character to have realistic proportions, but this doesn't look like a stylistic choice; it just looks crude and amateurish.
  21. Is there a reason the zipped version is preferred? I always thought it was because the forum wouldn't accept raw DLLs, but apparently that's not so. I'd just as soon save a step when posting plugins and skip the zipping (not that it's a big deal).
  22. A plugin I'm sure I could have used quite a number of times. Like Red ochre, I encourage you to move it to the already-existing "Text Formations" submenu, to prevent a proliferation of similar submenus.
  23. Congratulations to Woodsy for another excellent entry. Congratulations to Pixey and Iron67, too. Thanks to toe_head2001 for hosting.
  24. Strange. I don't seem to have the same effect. If you have hardware acceleration enabled, you might try disabling it to see whether that changes anything.
  25. The highlight color in the tutorial is wrong, though. Highlights on colored metal are (approximately) the color of the metal, not white. Using white highlights makes the result look like colored plastic rather than gold. That could be easily corrected by using a gradient color map that goes to a fully-saturated golden color instead of white. (Of course, in the case of the current thread, that doesn't matter, since the letters aren't colored much).