Coder Social home page Coder Social logo

bluescan / tacentview Goto Github PK

View Code? Open in Web Editor NEW
287.0 287.0 29.0 296.47 MB

An image and texture viewer for tga, png, apng, exr, dds, pvr, ktx, ktx2, astc, pkm, qoi, gif, hdr, jpg, tif, ico, webp, and bmp files. Uses Dear ImGui, OpenGL, and Tacent. Useful for game devs as it displays information like the presence of an alpha channel and querying specific pixels for their colour.

License: ISC License

C++ 100.00%
apng astc bmp crop dds dear-imgui exr gif hdr image image-processing image-viewer jpg ktx ktx2 png qoi tga tiff webp

tacentview's People

Contributors

bluescan avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar

tacentview's Issues

[Suggestion] Add separators between icons

Right now, all the icons are all just lined up next to each other and not necessarily grouped by functions. Adding separators and grouping the icons in a more sensible way will make the menu bar easier to navigate.

Agreed.

[Suggestion] Option to reset the zoom when switching image

Pretty self-explanatory, navigating through folders with images of multiples sizes can get a bit messy because of that. Maybe put a 'default zoom mode' option in the preferences would fix that? Since zooming in or out resets it to 'Zoom user'.

Yup. Agree.

[Suggestion] Multiple small suggestions

Hello, first of I want to thank you for providing this great image viewer! I always struggled to find one that fitted my needs as well as this one does.

After using it for a bit, I want to make a couple of suggestions on how to improve the program even further (or at least put them as options and sorry if some of them have already been suggested!). I am running on Linux:

  • Zooming the image doesn't take up the entire workspace:

image
image
I don't know if this is deliberate, but I think it looks weird. The 'zooming area' seems to keep the image aspect ratio.

  • Option to reset the zoom when switching image:

Pretty self-explanatory, navigating through folders with images of multiples sizes can get a bit messy because of that. Maybe put a 'default zoom mode' option in the preferences would fix that? Since zooming in or out resets it to 'Zoom user'.

  • Option to close the program with 'Escape':

Some other image viewers have this feature (and sometimes by default), and I think it helps speeding up the workflow when going through multiple pictures.

  • Support for non-US keyboards:

Now, I know this is a common issue with GLFW and ImGUI programs, but there are have been several workarounds posted to the ImGUI and GLFW issue trackers. I managed to make it work using a slightly 'dirty' method, but it would be nice to have this change made upstream.

  • 'Basic View' mode doesn't restore the interface and settings as they were:

For example, when I exit 'Basic View', the 'Nav bar' disappears and the 'Auto Property Window' setting gets disabled. I don't really like that.

  • The DDS property editor is the same as the one for animated pictures:

Only the option to display layers one-by-one would be needed here.
image
image

  • Option to enable 'Display Mipmaps' and 'Display Cubemap' by default when viewing DDS files:

Maybe also move those buttons to the DDS property editor window since it's the only image type that uses these options.

  • A keybind window:

The option to rebind keys would be nice (and not all features have a keybind assigned to them currently). Maybe also add a key hint to the icons when hovering them as well?

  • Add separators between icons:

Right now, all the icons are all just lined up next to each other and not necessarily grouped by functions. Adding separators and grouping the icons in a more sensible way will make the menu bar easier to navigate.

  • Option to scale the UI / make the font bigger:

This is just for accessibility reasons and for people with bigger / smaller monitors.



I think this is everything that I wanted to say for now. None of these issues are a deal breaker by any means! But it would make the program feel even better to use this way in my opinion.

[Suggestion] Support for non-US keyboards

Now, I know this is a common issue with GLFW and ImGUI programs, but there are have been several workarounds posted to the ImGUI and GLFW issue trackers. I managed to make it work using a slightly 'dirty' method, but it would be nice to have this change made upstream.

I don't own any...although I'm sure you can set the OS to interpret the scancodes as if it were a different layout. If you have code (messy or not), it could be attached to this issue (after a sep bug is made for it).

        // Convert key codes to support non-US keyboards
        const char* keyName = glfwGetKeyName(key, 0);
        if (keyName)
        {
        	key = static_cast<int>(static_cast<unsigned char>(keyName[0]));

		// Convert to upper-case
		if (key >= 97 && key <= 122)
			key -= 32;
        }

Adding this block of code just before the 'key' switch statement in 'KeyCallback()' seems to do the trick for AZERTY (need testing for other layouts such as QWERTZ). I also don't know if it has an impact on performance (probably not since it's a very small operation, but who knows).
If this solution works out I feel like it's better than having the user change things in their OS as the vast majority of programs support different layouts natively (it seems to be a shortcoming on GLFW and ImGUI's side).

Generate thumbnails on separate threads

We need to be able to open folders with 1000s of photos. Thumbnail gen is too slow to allow it to block the main thread. Plan is to use non-locking atomic bool (bit-set-and-test) for synchronization.

Better batch options.

jpg slider quality control needed.
Modes should include

  • Keep same size
  • Resize (does WH)
  • Width (force all images to specified width. Keep aspect ratio.
  • Height " " "
  • Percent (of original ... both W and H.

[Suggestion] Restore Maximized/Fullscreen view states

Currently only window size is restored.

If I maximize window, quit, open again, the size will be correct (looks like maximized), but window is not truly maximized.

I prefer to have a fullscreen view from the start, and I set q keybind for quick exit.

Implement proper multi-monitor support for both platforms.

Hi,
I recently got a dual monitor setup and noticed an annoying bug on Linux with KDE, the window always appear on the left-most monitor (which is my 2nd screen for me)

I actually identified the cause: before loading the window settings, the program clamps the position value, but it doesn't take into account that the origin point shift to the left-most point in a multi-monitor setup on Linux (at least on X11, I didn't test Windows or Wayland)

If the intent was to prevent the window from spawning out-of-bounds, it is unnecessary because this is done automatically (either by GLFW or X11, I don't know). It also does it for the size

Thank you again for the program!

Nav bar update

If you create a contact sheet in a subfolder that doesn't yet exist, the nav bar will not be updated to show a dropdown for the subfolder. You need to go up a level first.

Set monitor gamma in saved settings.

If you know your monitor gamma, we should store it in the settings where it is saved. Gamma correction is, optionally, used by the hdr formats (.hdr and .exr). Set gamma to 1 is you want linear colours pushed out to your monitor. Set default to 2.2.

The first frame of animated gifs with transparency contains uninitialized (garbage) pixels

Unsure if this is the correct project to report this bug, but the problem is that transparent pixels are allocated, but never initialised to any value for the first frame in a gif file. This can be fixed by inserting the line
memset(FrmPict, 0, Width * Height * sizeof(tPixel));
at line 47 of tImageGif.cpp.

Incorrect, garbage background:
garbage

Correct, clean background:
fixed

Images are incorrectly centered at some window sizes

Small images appear blurry at some window sizes because the image centering logic at TacentView.cpp line 975 is incorrect. This can be fixed by replacing the block with the following:

float offsetW = tMath::tRound((draww - w) / 2.0f);
left	+= offsetW;
right	= left+w;

float offsetH = tMath::tRound((drawh - h) / 2.0f);
bottom	+= offsetH;
top		= bottom+h;

Blurry, incorrect:
blurry
Clear, correct:
correct

Manage supported extensions instead of hardcoding.

The file dialog currently has the extension filter hardcoded. May need functionality in tacent to go from filetype back to associated extensions. Add 'CanLoad' (os maybe 'GetLoadableExtensions') and 'CanSave' (or GetSaveableExtensions) to the Image class (similar to tPicture).

Then will need to generate the filter from the functions above.

Preferences tabs

The reset behaviour and interface buttons need to go. There should be a separate reset button for each tab that only affects that tab.

[Suggestion] Option to close the program with 'Escape'

Some other image viewers have this feature (and sometimes by default), and I think it helps speeding up the workflow when going through multiple pictures.

Sure. FYI Alt-F4 currently works.

I am aware of Alt-F4 but using only one button compared to having to cramp my hand for two quite far apart button feels better IMO.

[Suggestion] Option to scale the UI / make the font bigger

This is just for accessibility reasons and for people with bigger / smaller monitors.

Also a bit of work... cuz I know there are at least some hardcoded offsets etc for some of the UI widgets/controls.

I haven't looked at a way to solve this either... Probably will be complicated as you say

Cache thumbnails

Yes, I'm using the issue tracker as my to-do list. Thumbnails need to be cached. Will use the tHash functions.

The DDS property editor need some changing

Only the option to display layers one-by-one would be needed here.
image
image

Maybe also move the 'Display Mipmaps' and 'Display Cubemap' buttons to the DDS property editor window since it's the only image type that uses these options and add an option to enable them by default.

Orig intended for editing properties. Need to think about this one a bit. Point taken that only DDS files support mipmaps and cubemaps so why clutter the toolbar. As for the frame duration, agreed it should not be there for, say, DDS files... not sure for other 'non-animated' image types. Tiff, for example, can store multiple 'pages' (images)... and they could be used for flipbook anim. In fact, that frame duration field does actually set the value -- so you can adjust, for example, how long each frame takes and if you save as a gif, apng, etc, it will write that duration out. For tiff files it uses a custom (user) field for the duration, so if you reopen in tacentview, you will see it play with the saved duration for each frame.

Hmm, I wasn't aware tiff files could be used like this, it's interesting. I'll let you see how to handle this dialog, and I'll be happy to provide more feedback if needed!

Animated GIFs

Make the AltImage picture a list of pictures. Cximage can already load the frames. Note that frame-delay is in ms in a gif.

Generation of targa contact sheets

Currently generation of a tga contact sheet can generates a 32 bit image even if all source images are fully opaque. In this case it should generate a 24 bit targa.

32bit binaries

Hi, please make binaries for win32, I would like try this image viewer, looks really good, however is a shame if avaible just for 64bit systems.

[Suggestion] A keybind window

The option to rebind keys would be nice (and not all features have a keybind assigned to them currently). Maybe also add a key hint to the icons when hovering them as well?

Can put on list. It's a bit of work.

I am aware, this is kind of a luxury right now, take your time!

Shift Delete

Bring up a popup same way as regular delete, except do not try to use the recycle bin, Warn user.

[Bug] Filename encoding problems

Tacent won't open file if it has Cyrillic letter (it opens with blank window).
try rename a file to ั‹.png

Tacent title bar incorrectly display filenames with chars that not English.
image

No Issue - just thanks ;)

Just spend way too long looking for a HDR viewer, eventually came to github and found your release.

All I needed was a quick way to see my HDR's to decide which to import into Blender, the Content View is ideal for me.

So just thanks for doing whatever it is you do. It's appreciated.

Kind Regards TT

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.