Jump to content

RAWFileLAB 1.0.5.2 - RAW File reader with GUI (2021-08-20)


operamint
 Share

Recommended Posts

Posted (edited)
30 minutes ago, toe_head2001 said:

@wildeskraut

I was able to load your image without any issues.

 

pdncr3.jpg

 

Please make sure you install 'Adobe DNG Converter' as the instructions say in the first post.

I already installed it, but I will re-do everything.
Furthermore: I can open the sample CR3 which is provided in the installing instructions. That is a little confusing IMHO.

Edited by wildeskraut
Link to comment
Share on other sites

39 minutes ago, toe_head2001 said:

@wildeskraut

I was able to load your image without any issues.

 

pdncr3.jpg

 

Please make sure you install 'Adobe DNG Converter' as the instructions say in the first post.

 

I found the problem: I am unable to open it directly from a folder which syncs with Nextcloud. If I copy the same file to my "Desktop" or any other folder, I am able to open it.

Link to comment
Share on other sites

  • operamint changed the title to RAWFileLAB 1.0.5.2 - RAW File reader with GUI (2021-08-20)

Uploaded v1.0.5.2

  • Fix to allow opening CR3 and GPR files from read-only folders (via DNG Converter). Should fix the problem reported by wildeskraut.
  • dcraw.exe now included - simplifies installation
  • Added back source code!

Sorry for my outburst last year, had a bad day probably.

  • Upvote 1
Link to comment
Share on other sites

@operamint, why is your code using reflection on the Stream it's given? That's strictly not allowed for plugins. You need to remove that sort of thing from your plugin ASAP, otherwise I'll have to block it.

 

image.png

The Paint.NET Blog: https://blog.getpaint.net/

Donations are always appreciated! https://www.getpaint.net/donate.html

forumSig_bmwE60.jpg

Link to comment
Share on other sites

I have edited the first post in this thread to remove the download links. 

 

DO NOT USE REFLECTION TO ACCESS THE INNER STREAM. You knew about this, yet you kept doing it anyway. Your plugin will be blocked in the app as well, up through version 1.0.5.2.

 

You will need to provide an update that does not do this.

The Paint.NET Blog: https://blog.getpaint.net/

Donations are always appreciated! https://www.getpaint.net/donate.html

forumSig_bmwE60.jpg

Link to comment
Share on other sites

You knew about this, yet you kept doing it anyway

 

FYI: No, the plugin did not RELY on that code to work. My understanding was that the intention of this rule was to prevent that plugins suddenly stopped working because of unofficial API usage. I respected that and made an automatic fallback that worked without reflection (slower), and would ensure that the plugin continued to work should there be any internal changes to this private API. There may be other reasons for not allowing using reflection at all (e.g. security), and I would not have used that code if I knew.

 

If your intention is to reduce the number of contributors to your project, you are doing a good job.

 

I already made a functional update of the plugin and removed the reflection code, so I'll post it and leave it at that.

 

Link to comment
Share on other sites

This is not open for debate

 

I don't argue for using reflection. The source of the problem, which you may be aware of, is that to my limited knowledge the API for a FileType plugins does not provide a method for getting the file name it is reading. Many preprocessing tools does not provide an input stream interface, but file only (e.g. dcraw and dcraw_emu - however they do have stream output). So when you want to preprocess the input stream, it must first be copied to a temporary file and deleted after, which is cumbersome and inefficient when loading a 50 - 100MB raw file. Any technical reasons for leaving out this piece of information from the API?

Link to comment
Share on other sites

Posted (edited)

Another, and the most severe consequence of not knowing the file name that is loaded, is that the GUI cannot display the file name. This is important for the plugin because it only shows the info about the last loaded raw file, and not the last file loaded currently displayed file in PDN. This renders the plugin far less useful and rather awkward.

 

/ADD: I am not even sure it's worth uploading the new version without the file name information. It does provide some value for experimenting, but gets very confusing when switching between images in PDN. You may also not use the "Reload" (file with new dcraw parameters) button anymore. It's unfortunate, as the updated version now uses dcraw_emu from libraw which support Canon .CR3 natively, and the GUI shows more detailed raw metadata than previously.

Edited by operamint
Link to comment
Share on other sites

The file name isn't provided because there's no contractual guarantee that the Stream is even for a file in the first place. It could be coming from an in-memory cache, or a file that's being decompressed on-the-fly, or a network location, etc.

 

If someone wants to load a 50-100MB file then they just have to pay the performance cost of having it copied into a temporary file first. I'd expect someone working with images that large to have a system capable of doing that. On a modern SSD (from the last ~10 years), 50-100MB is not a big deal at all.

The Paint.NET Blog: https://blog.getpaint.net/

Donations are always appreciated! https://www.getpaint.net/donate.html

forumSig_bmwE60.jpg

Link to comment
Share on other sites

Posted (edited)

Thanks for replying, Rick. Appreciated. Yes I agree with your last section - the copy cost isn't that bad, and it actually takes a rather small fraction of time compared to the unpacking of the raw file.

 

Regarding the file name, as I mentioned it is a rather important feature for my plugin. A static function string Pdn.Document.GetFileStreamName(Stream input) would return null when there is no file name associated. Much the same as the common construct: if (input is FileStream fs) LoadFile(fs.Name); else LoadStream(input);

- it's just that this always returns null on your special Stream ;)

 

/Add: working implementation using reflection 

public static string /*Pdn.Document.*/GetFileStreamName(Stream input)
{
    // Is it a regular FileStream?
    if (input is FileStream fs1) return fs1.Name;
    // Is it a Pdn FileStream?
    FieldInfo fi = input.GetType().GetField("innerStream", BindingFlags.NonPublic | BindingFlags.Instance);
    if (fi != null && fi.GetValue(input) is FileStream fs) return fs.Name;
    return null; // not a FileStream
}

 

Edited by operamint
Link to comment
Share on other sites

I need to do some refactoring of the OnLoad/OnSave methods anyway. Providing the file name, but not the file path, will be a reasonable addition. It will be a nullable property, it's not guaranteed to be filled in. As long as you just need the file name for display purposes, or even just to make the temp file name match up, it should work well.

The Paint.NET Blog: https://blog.getpaint.net/

Donations are always appreciated! https://www.getpaint.net/donate.html

forumSig_bmwE60.jpg

Link to comment
Share on other sites

Posted (edited)

Sorry for the late reply.  The filename would help a lot, and I would reupload my plugin. Still, by missing the path I will have to remove the "Reopen" button, which reopens Pdn with the last opened raw image. This is quite convenient when multiple images are open in Pdn, and the plugin GUI is not in sync with the displayed image. Not a deal breaker though.

 

/Add: Tbh, the Reopen feature is not safe, as it just uses default path to Pdn. I suppose I could look it up from a registry key, but then there is the Windows Store version as well, so this should be removed for now anyway.

Edited by operamint
Link to comment
Share on other sites

12 hours ago, operamint said:

/Add: Tbh, the Reopen feature is not safe, as it just uses default path to Pdn. I suppose I could look it up from a registry key, but then there is the Windows Store version as well, so this should be removed for now anyway.

 

For the Store version, you can relaunch PDN using the paintdotnet: protocol, although that won't work with the portable version.

 

 

The Paint.NET Blog: https://blog.getpaint.net/

Donations are always appreciated! https://www.getpaint.net/donate.html

forumSig_bmwE60.jpg

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

 Share

×
×
  • Create New...