Jump to content

Suggestion: History of past images


Recommended Posts

Okay, I don't know if anybody has posted about this, I've looked and found nothing so here it goes.

Explination:

Somebody makes this really sweet signature. You're like dang man, how he/she do that. You Pm that person and they say, "Well, I just got lucky."

(Hmm, just a little bit of a problem.)

But wait, with a history of past images you can see what you did, and in what order. That would be so amazing, no more I don't know how's or I got lucky's.

(Sounds good so far, right?)

Now he/she writes a tutorial, then posts it.

(Problem solved? YES!)

Thanks for taking your time and reading this. Now post if you agree or disagree, and why.

armyoftwopdnzd7.png
Link to comment
Share on other sites

Umm, do you really need a poll? The rules clearly state that polls are strictly reserved or the Overflow.

21) Don't create useless polls. Also, don't create polls in any forum except the Overflow forum--and even then we may delete them if they are useless.

As for your suggestion, couldn't you just take a screenshot of your history box?

Call me expired. Please.

th_Energyv2.png

Don't go counting your chickens before the pack of rabid ravaging foxes attacks. -Sozo
Link to comment
Share on other sites

Umm, do you really need a poll? The rules clearly state that polls are strictly reserved or the Overflow.
21) Don't create useless polls. Also, don't create polls in any forum except the Overflow forum--and even then we may delete them if they are useless.

As for your suggestion, couldn't you just take a screenshot of your history box?

Im saying if they made it like a month ago, and didn't really think anybody was going to ask. They have no record of what they did, ya know. The history is cleared after you close the program.

(Deleted Poll)

armyoftwopdnzd7.png
Link to comment
Share on other sites

Yes, but History can be quite ambigous:

You use a Effect/Adjustment: What settings? (Especially for those with a lot of settings, like Dents)

You use Line/Curve or Paintbrush: Where did you use it? What size? What color?

You use the Fill Bucket: What color? Any specific pattern?

You use the Selection Tools: Where did you use it on?

You use the Move Selection Tool: How much did you move it? How much did you resize it? Did you constrain to proportions?

See what I'm getting at? Just having a History doesn't mean you will be able to replicate the image. (although in some cases it could provide a general direction)

Call me expired. Please.

th_Energyv2.png

Don't go counting your chickens before the pack of rabid ravaging foxes attacks. -Sozo
Link to comment
Share on other sites

I'm not sure whether that would be possible or not. I mean, I would think it would have to be incredibly complex to keep track of every little thing you do. However, that is just how I would imagine it, I could be wrong, seeing as I have never coded anything in my life, nor do I have any knowledge of coding whatsoever.

Call me expired. Please.

th_Energyv2.png

Don't go counting your chickens before the pack of rabid ravaging foxes attacks. -Sozo
Link to comment
Share on other sites

I'm not sure whether that would be possible or not. I mean, I would think it would have to be incredibly complex to keep track of every little thing you do. However, that is just how I would imagine it, I could be wrong, seeing as I have never coded anything in my life, nor do I have any knowledge of coding whatsoever.

True, idk... it just seemed like a good idea. Only because I talk to people and they forget how. I wanted to be able to find a way to get back and check out what you did.

armyoftwopdnzd7.png
Link to comment
Share on other sites

This would be quite easy. You could record history... and assuming that the functions act like any other API (including plugin functions), the parameters will show tell tale hints on the options you have used. I think other programs have this feature, its called an Action i believe.

Link to comment
Share on other sites

I think if we all be patient some 'great plugin author' will have something to surprise us all.

As well, while we are on the topic of History, here is a little suggestion brought up by Expired:

Can you allow for us to add descriptions to steps made in history? Perhaps something like an edit button on the right of the step that will allow for us to take notes as we go along and then allow us to save the notes in a .TXT format or something? Tutorial writing would become the easiest thing possible, and it would solve saving the History of Images problem brought up in this thread.

signature.png

Link to comment
Share on other sites

Yeah, making it a plugin is absolutely impossible. The Plugins API allows for only effects, adjustments, and filetypes.

Best option: Use pyrochild's Scriptlab plugin. But even then, you're talking about (as sabrown said) a very clunky fix.

 

The Doctor: There was a goblin, or a trickster, or a warrior... A nameless, terrible thing, soaked in the blood of a billion galaxies. The most feared being in all the cosmos. And nothing could stop it, or hold it, or reason with it. One day it would just drop out of the sky and tear down your world.
Amy: But how did it end up in there?
The Doctor: You know fairy tales. A good wizard tricked it.
River Song: I hate good wizards in fairy tales; they always turn out to be him.

Link to comment
Share on other sites

It shouldn't be too hard. The way I see it a plugins' functions should have parameters that you can recall on. Ex: Selection coordinates. (4 parameters), everything from the call could be saved, by just hooking all function headers and then look for the RET so you know how many parameters you have. However I'm not familiar with C#.NET calling structure (I've heard they have to use wrappers to call winAPI, instead of the API itself) , as I highly disbelieve in an interpreted language's possibility/power, so I could have misinformed knowledge about the disassembled structure.

Link to comment
Share on other sites

I think you've been misinformed. This function isn't even in Adobe Photoshop; I don't know how you can say this would be "easy" in this situation. It would be an insanely high demand on system resources, as Rick stated in the link CMD provided.

Plus, unless you've single-handedly created a free image editor that redefines open-source software, I don't think you're qualified to say what's "easy" or not. ;-)

 

The Doctor: There was a goblin, or a trickster, or a warrior... A nameless, terrible thing, soaked in the blood of a billion galaxies. The most feared being in all the cosmos. And nothing could stop it, or hold it, or reason with it. One day it would just drop out of the sky and tear down your world.
Amy: But how did it end up in there?
The Doctor: You know fairy tales. A good wizard tricked it.
River Song: I hate good wizards in fairy tales; they always turn out to be him.

Link to comment
Share on other sites

I think you've been misinformed. This function isn't even in Adobe Photoshop; I don't know how you can say this would be "easy" in this situation. It would be an insanely high demand on system resources, as Rick stated in the link CMD provided.

Plus, unless you've single-handedly created a free image editor that redefines open-source software, I don't think you're qualified to say what's "easy" or not. ;-)

I was talking about interpreted language calling methods. Obviously, you don't know what it is, as i was talking about hooking methods. a program could create a table of functions and then the recording thing would parse the table and set a hook most commonly a jmp hook. (an example would be an IAT, the program creates a list of functions it uses, and you can then set up an IAT hook.) Anyways the closest thing is an Action in photoshop, and if you code a thing correctly then it should have parameters (much like winapi, ill follow up with a made up procedure)... highly demand? no this is quite possible. like a brush you could have movement set data x1>x2 y1>y2 (widely used in games for mob movement control and if it was high resource i dont think a packet would be able to keep up with the game if it was that big of data, you could also have a few more dwords with that data, including brush size, brush color, brush opacity and other features of the brush)

Blur is our procedure

it has a few paremeters

int Power of Blur

X - initial x (selection)

Y - initial y

X2 - offsetted x

Y2 - offsetted y

by hooking it you can see what the user did, including the selection area and the amount of blur used. however there are more complexities in a blur but this is just an example. my realm of programming is not graphics based, but similar concepts are always there. A critique does not need to be able to do whatever he is critiquing, to be able to give advice. besides open source has no basis, and it doesn't redefine what open source is. it doesnt even need to be free. not like i have coded something like this but, those points don't make sense :P

Hidden Content:
anyways some more depth if your interested.

usually when you call a function you push parameters, though ive heard that some compilers (MingW?) mov them instead

push y2

push x2

push y

push x

push pblur

call BLUR

now at blur assuming we are using stdcall calling convention it will look like this

BLUR:

calulations and etc

ret 0x5*4

so if you were to hook it you would know that there is 5 parameters from the ret

you can plug those back in.

hook could be like

hook:

pop memvar1

pop memvar2

pop memvar3

pop memvar4

pop memvar5

pop memvar6

(push back all 6, 6 because calling has EIP which is used in ret)

jmp back

Link to comment
Share on other sites

Look here: viewtopic.php?f=12&t=2474 , where BoltBait explains why it wouldn't work for plugins; they don't return information about what they're doing. I assume the built-in effects and plugins do the same; I doubt the tools return any, either.

And I've finally found Rick's explanation of the matter:

Ahh yes, the blissful naievety of someone who is not a developer on the project :) (I don't mean that as an insult)

First, yes disk space would be a concern especially for large images and wanting to send them over the Internet. "What, this file is 1024x768 and 500mb?!" Ack.

Second, it's much much more complicated than you'd think to save the history with the image. The History was always meant to be part of the application's state, not the image. As such it was never designed to be saved to disk and then loaded back and reconstructed. The data structures are currently set up to be able to persist portions to disk (to save memory, esp. on 32-bit systems), but not all.

But, let's pretend for a moment that the history was designed to work in this way. Now we have all this revision data that is saved by Paint.NET v2.xx that must be successfully loaded in to memory by Paint.NET v3.0. And then those files must be loadable by 3.x and beyond, etc. Backwards file format compatibility is paramount for an application like Paint.NET.

That means my hands are possibly tied if I want to change, improve, or fix bugs in certain areas of the history's data structures. If I make a change that could even remotely cause a problem, I need to have a stack of .PDN sample files to test with to make sure that when I load them not only does the history load correctly, but that it works to undo and redo in all sorts of intense combinations.

For example, what if I wanted to add the ability to do shearing or arbitrary, complex transformation with the Move Selected Pixels tool? That would change how its history data is stored and organized. Adding this feature would be complicated by having to ensure that old .PDN files could still be loaded and safely migrated to the new format.

One alternative to this tying-my-hands is to provide history saving "with no warranty." If the file format changes in a breaking way between versions, then too bad: it gets thrown away but you still have the image. At which point the history is essentially worthless. Also, the stuff takes up lots of disk space. So I'd need to provide a tool for stripping the history away to cut down file size. This is another tool or feature that must be designed, implemented, tested, and maintained over the entire lifetime of the Paint.NET project.

It's just not worth it, honestly. It's just too much. I've done the investigation to see what this would cost and it is not even remotely simple or cheap, unfortunately.

And here's the link to the original thread: viewtopic.php?f=12&t=2187

Whew. Didn't return on any search results through the forum search or through searchpaint.net. Gotta love this forum. :roll:

EDIT:

What if the history panel was simply extended to store the parameters as well?

Click the first link here.

 

The Doctor: There was a goblin, or a trickster, or a warrior... A nameless, terrible thing, soaked in the blood of a billion galaxies. The most feared being in all the cosmos. And nothing could stop it, or hold it, or reason with it. One day it would just drop out of the sky and tear down your world.
Amy: But how did it end up in there?
The Doctor: You know fairy tales. A good wizard tricked it.
River Song: I hate good wizards in fairy tales; they always turn out to be him.

Link to comment
Share on other sites

ahh... this is why a hook is beautiful. You can go into the function and essentially steal the data that they are using and then plug them back in.

example would be a call to CreateWindowA

the function never returns the parameters, but by going to the call you can check out window position so you can copy down a gui you love and recode it for your own purpose.

Link to comment
Share on other sites

ahh... this is why a hook is beautiful. You can go into the function and essentially steal the data that they are using and then plug them back in.

Well, it sounds like you have it all worked out.

Download the source to Paint.NET and pop it in! I'm dying to see it.

Click to play:
j.pngs.pngd.pnga.pngp.png
Download: BoltBait's Plugin Pack | CodeLab | and how about a Computer Dominos Game

Link to comment
Share on other sites

If you can't do it, you have no concept of how easy or hard it would be.

 

The Doctor: There was a goblin, or a trickster, or a warrior... A nameless, terrible thing, soaked in the blood of a billion galaxies. The most feared being in all the cosmos. And nothing could stop it, or hold it, or reason with it. One day it would just drop out of the sky and tear down your world.
Amy: But how did it end up in there?
The Doctor: You know fairy tales. A good wizard tricked it.
River Song: I hate good wizards in fairy tales; they always turn out to be him.

Link to comment
Share on other sites

If you can't do it, you have no concept of how easy or hard it would be.

That is simply not true, I can tell you for one, it is incredibly hard to map out the brain and its complexities, yet i cannot do it.

I am not a high level programmer, I program in assembly. I don't deal with these kinds of things. I have no interest in programming something like this.

I was just offering ideas on how to implement it. NOT the actual idea of saving history. (regards to BoltBait)

To sum it up, yes you can say how hard things in theory should be.

Link to comment
Share on other sites

Guest
This topic is now closed to further replies.
 Share

×
×
  • Create New...