var stream = new MemoryStream();
image.Save(stream, System.Drawing.Imaging.ImageFormat.Png);
In the Shape Tool - Line Shape -> lock ratio, this currently constrains the lines to be diagonal.
IMHO it'd be a more common use case that users would want to constrain a line to be horizontal or vertical.
I would suggest changing the default behaviour of the ratio lock for line shapes to be horizontal/vertical and not diagonal.
You could leave the Ctrl key modifier to still constrain diagonally, but add a Shift key modifier so that holding shift constrains the line vertically / horizontally (this would coincide with Photoshop behaviour).
I know it's not a great idea to change behaviour on published code, so could consider adding a LockRatioMode property to the shape tool that defaults to Diagonal, and allow coders to set it to HorizontalVertical to implement the new behaviour.
Thanks
I just requested similar functionality for the Shape tool when drawing lines, and thought it would also be useful to have something similar in the Draw tool. I've raised a separate feature request because this one is for a different tool.
It would be good in the draw tool if holding the Shift key while drawing constrained the line to be horizontal or vertical.
In my use case people will load images and might want to underline things on the image.
Currently there is no way I can see to draw a perfectly horizontal line.
If in the draw tool you could hold shift and draw a perfectly horizontal line it would make this really easy and intuitive for the end user.
PS. To make the functionality more consistent with the Shape line tool, you could also add Ctrl as a modifier to the Draw tool to constrain the line diagonally.
The user should create a custom tool if they need to change the default settings of the DrawTextTool. It would be nice to provide an easier way for achieving this.
Using the built in OpenImageCommand functionality of telerik:RadImageEditorUI, you can detect the OpenImageCommand has been executed via the CommandExecuted event.
However there is no way to determine whether an image was loaded or not.
The Dialog Result is silently consumed by the OpenImageCommand class so if the user clicks the cancel button on the open file dialogue you have no way of knowing.
It would be good to have a means to determine the dialog result, either via a property on the command, by an additional property in the CommandExecuted event args, or even an event that is raised when an image is loaded or the dialog is cancelled.
To achieve this functionality I had to implement code like the following:
public bool IsNewImage { get; set; }
private void ImageEditor_CommandExecuting(object sender, ImageCommandExecutingEventArgs e)
{
if (e.Command is OpenImageCommand)
{
IsNewImage = false;
}
}
private void HistoryOnCurrentImageChanged(object sender, EventArgs e)
{
var history = (ImageHistory)sender;
IsNewImage = (!history.CanRedo && !history.CanUndo);
}
private void ImageEditor_CommandExecuted(object sender, ImageCommandExecutedEventArgs e)
{
if (e.Command is OpenImageCommand)
{
if (IsNewImage)
{
// Deal with new image...
}
}
}
It'd be so much easier to have the following:
private void ImageEditor_CommandExecuted(object sender, ImageCommandExecutedEventArgs e)
{
if (e.Command is OpenImageCommand)
{
if (!e.CommandCancelled)
{
// Deal with new image...
}
}
}
Thanks 👍
Currently there isn't a way to determine if an image in the Image Editor has any changes.
There is a HistoryOnCurrentImageChanged() event which goes some way to providing the functionality, but this doesn't fire until a tool is committed.
For example, if you load an image, and select the Hue tool, and then drag the hue slider and change the image, this won't trigger the HistoryOnCurrentImageChanged() event until the user commits the tool e.g. clicks another tool or clicks off the image...
What would be perfect would be to have a HasChanges() property on the image editor that gets set to true when any aspect of the image is edited e.g. a tool slider is moved and the changes are not yet committed.
This would allow things like being able to have the the Save button disabled until the image is edited. Or being able to warn a user they are about to lose their changes if they have edited (say) the hue but have not yet committed the tool.
See also - https://www.telerik.com/forums/detecting-change
Thanks
Please add a property to disable the zoom witch CTRL+MouseWheel. Maybe something like IsMouseWheelZoomEnabled with a defaut value of true.
There are already other properties like IsPanningEnabled or ZoomToCursor.
The currently known solution is:
private void imageEditor_PreviewMouseWheel(object sender, MouseWheelEventArgs e)
{
if (Keyboard.IsKeyDown(Key.LeftCtrl) || Keyboard.IsKeyDown(Key.RightCtrl))
{
e.Handled = true;
}
}
Currently, on each change of the image, a new instance of the image is stored in the undo/redo stack. This means that the memory grows very fast. Especially, in a scenario with big images.
Create a smarter undo/redo mechanisms that saves only the applied change in the image.
The setting should be available in the settings UI, the DrawTextCommandContext and it should be respected in the DrawText command's Execute method. Scheduled for:
The feature will be available in R1 2019, scheduled for the mid of January 2019.
Implement a command that opens a print dialog that allows you to print the image. There could be a print button in the RadImageEditorUI next to the "Save" and "Open" buttons.
Sometimes it is better not to integrate changes directly into a bitmap. Layers will enable grouping the effects of several tools and applying/reverting the changes at a later time. Alphachannel support in Silverlight is already available. Saving may require a proprietary file format, Paint.NET's .pdn or tiff export/import.
Add tool for creating selection, and integrate the other tools to work only in the selected region, if one is present.
Add an option to zoom towards the mouse cursor.
Expose property (e.g. InitialPosition) that will set X and Y start in CropCommandContext from CropTool To achieve this with the current API this you can get the CropAdorner control from the visual tree and set its CropRect property. private void imageEditor_Loaded(object sender, RoutedEventArgs e) { ImageEditorRoutedCommands.ExecuteTool.Execute(new CropTool(), this.imageEditor); var cropAdorner = this.imageEditor.FindChildByType<CropAdorner>(); cropAdorner.CropRect = new Rect(10, 10, 100, 100); }