Coder Social home page Coder Social logo

carina-studio / pixelviewer Goto Github PK

View Code? Open in Web Editor NEW
203.0 2.0 33.0 157.63 MB

A cross-platform image viewer which supports reading raw Luminance/YUV/RGB/ARGB/Bayer pixels data from file and rendering it.

Home Page: https://carina-studio.github.io/PixelViewer/

License: MIT License

C# 99.07% Batchfile 0.43% Shell 0.51%
yuv yuv2rgb yuv420 yuv-tool rgba-data rgba-pixels desktop rgb ubuntu cross-platform

pixelviewer's Introduction

PixelViewer

PixelViewer is a .NET based cross-platform image viewer written by C# which supports reading raw Luminance/YUV/RGB/ARGB/Bayer pixels data from file and rendering it. Please visit the Website for more details.

PixelViewer 是一個由 C# 撰寫並基於 .NET 的跨平台影像檢視器,支援讀取及繪製原始 Luminance/YUV/RGB/ARGB/Bayer 像素資料。請參閱 網站 以取得更多資訊。

PixelViewer

📥 Download

3.1.1.428 Preview

3.0.5.214

⭐ Supported formats

  • Luminance
    • L8
    • L16
  • YUV
    • YUV444p
    • P410
    • P412
    • P416
    • YUV422p
    • P210
    • P212
    • P216
    • UYVY
    • YUVY
    • YUYV (v3.1+)
    • YVYU (v3.1+)
    • NV12
    • NV21
    • Y010
    • Y016
    • I420
    • YV12
    • P010
    • P012
    • P016
  • RGB
    • BGR_888
    • RGB_565
    • RGB_888
    • BGRX_8888
    • RGBX_8888
    • XBGR_8888
    • XRGB_8888
    • BGR_161616
    • RGB_161616
  • ARGB
    • ARGB_8888
    • ABGR_8888
    • BGRA_8888
    • RGBA_8888
    • ARGB_16161616
    • ABGR_16161616
    • BGRA_16161616
    • RGBA_16161616
    • ABGR_2101010
    • ARGB_2101010
    • BGRA_1010102
    • RGBA_1010102
    • ABGR_F16
    • ARGB_F16
    • BGRA_F16
    • RGBA_F16
  • Bayer Pattern
    • 10-bit MIPI
    • 12-bit MIPI
    • 14-bit MIPI (v3.1+)
    • 16-bit
    • 8-bit (v3.0+)
  • Compressed
    • HEIF
    • JPEG/JFIF
    • PNG
    • WebP (v3.0+)

⭐ Supported color spaces

  • sRGB
  • DCI-P3
  • Display-P3
  • Adobe RGB
  • ITU-R BT.601 525-lines
  • ITU-R BT.601 625-lines
  • ITU-R BT.2020
  • ITU-R BT.2100 (HLG)
  • ITU-R BT.2100 (PQ)

⭐ Supported functions

  • Rendering image from raw pixel file.
  • Evaluate image dimensions according to file name, file size and format.
  • Specify pixel-stride and row-stride for each plane.
  • Specify data offset to image in file.
  • Specify color space of image and screen.
  • Import ICC profile as custom color space.
  • Rotate and scale rendered image.
  • Navigate to specific image frame in file.
  • Adjust R/G/B gain for Bayer Pattern formats.
  • Adjust brightness/contrast and color balance.
  • Adjust highlight/shadow of image.
  • Show histograms of R/G/B and luminance.
  • Demosaicing for Bayer Pattern formats.
  • Save rendered image as PNG file.
  • Save rendered image as JPEG/BGRA file.

🤝 Dependencies

pixelviewer's People

Contributors

carina-studio avatar hamster620 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

pixelviewer's Issues

Nearest Neighbor Scaling

I zoomed into a small image (256x256) and was surprised to see that nearest neighbor scaling is not used, so it becomes very blurry. I think that should definitely be an option for a tool such as this that lets you see the information about individual pixels. Because right now if you zoom in, it's hard to tell which pixel you're actually hovering on.

Overall I really like the program though, it has come in handy.

See example below - With nearest neighbor you can distinctly see each individual pixel.

Original 256x256 Icon:
Registry1

Zoomed in with pixelviewer:
image

Zoomed in with photoshop (nearest neighbor):
image

Failing to run binary 2.7.4.312-arm64 version on Windows 11

Platform is Windows 11 on Snapdragon 8cx gen 3.

The executable does not start and this is the content of the log.txt file:

2023-06-05 15:14:23.6315 13668 1 DEBUG App: Created
2023-06-05 15:14:23.8487 13668 1 TRACE App: [Performance] Took 457 ms to initialize Avalonia framework
2023-06-05 15:14:23.8778 13668 1 WARN App: Multi-instances server stream created
2023-06-05 15:14:23.8778 13668 1 WARN App: Start waiting for multi-instances client
2023-06-05 15:14:23.8843 13668 1 DEBUG App: Start loading persistent state
2023-06-05 15:14:23.8843 13668 1 DEBUG App: Start loading settings
2023-06-05 15:14:23.9348 13668 1 ERROR HardwareInfo: Failed to check graphics card System.TypeInitializationException: The type initializer for 'System.Management.WmiNetUtilsHelper' threw an exception.
---> System.ComponentModel.Win32Exception (193): Failed to load required native library 'C:\Windows\Microsoft.NET\Framework64\v4.0.30319\wminet_utils.dll'.
at System.Management.WmiNetUtilsHelper..cctor()
--- End of inner exception stack trace ---
at System.Management.ThreadDispatch.Start()
at System.Management.ManagementScope.Initialize()
at System.Management.ManagementObjectSearcher.Initialize()
at System.Management.ManagementObjectSearcher.Get()
at CarinaStudio.AppSuite.HardwareInfo.CheckGraphicsCard()
2023-06-05 15:14:24.0220 13668 1 ERROR HardwareInfo: Unable to get total physical memory on Windows System.TypeInitializationException: The type initializer for 'System.Management.WmiNetUtilsHelper' threw an exception.
---> System.ComponentModel.Win32Exception (193): Failed to load required native library 'C:\Windows\Microsoft.NET\Framework64\v4.0.30319\wminet_utils.dll'.
at System.Management.WmiNetUtilsHelper..cctor()
--- End of inner exception stack trace ---
at System.Management.ThreadDispatch.Start()
at System.Management.ManagementScope.Initialize()
at System.Management.ManagementObjectSearcher.Initialize()
at System.Management.ManagementObjectSearcher.Get()
at CarinaStudio.AppSuite.HardwareInfo.CheckPhysicalMemory()
2023-06-05 15:14:24.0220 13668 1 WARN App: This is the first launch
2023-06-05 15:14:24.0220 13668 1 DEBUG App: Complete loading settings
2023-06-05 15:14:24.0220 13668 1 DEBUG App: Complete loading persistent state
2023-06-05 15:14:24.0220 13668 1 WARN App: Privacy Policy is not agreed yet
2023-06-05 15:14:24.0220 13668 1 WARN App: User Agreement is not agreed yet
2023-06-05 15:14:24.0621 13668 1 DEBUG App: No need to output log to localhost
2023-06-05 15:14:25.2665 13668 1 INFO App: Start checking update
2023-06-05 15:14:25.2665 13668 1 DEBUG JsonPackageResolver: Change state from Initializing to Started

Need to set background of SessionControl

Currently there is no explicit background set to SessionControl which causes window background will be seen through border inside SessionControl, especially when Mica applied on window.

How to show YUV image with correct colors?

Hi,

My test image:
Image_YUYV_1920x1200

I have a YUYV format image and I want to show the image in PixelViewer.
But It showed a image with incorrect color when I selected YUYV whatever I changed setting.
image

I expect the correct image like below:
image

I currently set L16 to show mono image to check image but I hope I can get color image with PixelViewer.
image

Thanks!

Default font family name can't be null or empty(ubuntu20.04)

(realbasicvsr1) ✘ ⚙ long@long-Ubuntu  ~/resources/soft/PixelViewer-2.7.4.312-linux-x64  ./PixelViewer
Unhandled exception. System.InvalidOperationException: Default font family name can't be null or empty.
at Avalonia.Media.FontManager..ctor(IFontManagerImpl platformImpl) in //src/Avalonia.Visuals/Media/FontManager.cs:line 33
at Avalonia.Media.FontManager.get_Current() in /
/src/Avalonia.Visuals/Media/FontManager.cs:line 53
at Avalonia.Media.TextFormatting.TextCharacters.TryGetRunProperties(ReadOnlySlice1 text, Typeface typeface, Typeface defaultTypeface, Int32& count) in /_/src/Avalonia.Visuals/Media/TextFormatting/TextCharacters.cs:line 129 at Avalonia.Media.TextFormatting.TextCharacters.CreateShapeableRun(ReadOnlySlice1 text, TextRunProperties defaultProperties) in //src/Avalonia.Visuals/Media/TextFormatting/TextCharacters.cs:line 62
at Avalonia.Media.TextFormatting.TextCharacters.GetShapeableCharacters() in /
/src/Avalonia.Visuals/Media/TextFormatting/TextCharacters.cs:line 40
at Avalonia.Media.TextFormatting.TextFormatterImpl.FetchTextRuns(ITextSource textSource, Int32 firstTextSourceIndex, TextLineBreak previousLineBreak, TextLineBreak& nextLineBreak) in //src/Avalonia.Visuals/Media/TextFormatting/TextFormatterImpl.cs:line 280
at Avalonia.Media.TextFormatting.TextFormatterImpl.FormatLine(ITextSource textSource, Int32 firstTextSourceIndex, Double paragraphWidth, TextParagraphProperties paragraphProperties, TextLineBreak previousLineBreak) in /
/src/Avalonia.Visuals/Media/TextFormatting/TextFormatterImpl.cs:line 15
at Avalonia.Media.TextFormatting.TextLayout.UpdateLayout() in //src/Avalonia.Visuals/Media/TextFormatting/TextLayout.cs:line 223
at Avalonia.Media.TextFormatting.TextLayout..ctor(String text, Typeface typeface, Double fontSize, IBrush foreground, TextAlignment textAlignment, TextWrapping textWrapping, TextTrimming textTrimming, TextDecorationCollection textDecorations, Double maxWidth, Double maxHeight, Double lineHeight, Int32 maxLines, IReadOnlyList1 textStyleOverrides) in /_/src/Avalonia.Visuals/Media/TextFormatting/TextLayout.cs:line 71 at Avalonia.Controls.TextBlock.CreateTextLayout(Size constraint, String text) in /_/src/Avalonia.Controls/TextBlock.cs:line 475 at Avalonia.Controls.TextBlock.get_TextLayout() in /_/src/Avalonia.Controls/TextBlock.cs:line 166 at Avalonia.Controls.TextBlock.MeasureOverride(Size availableSize) in /_/src/Avalonia.Controls/TextBlock.cs:line 521 at Avalonia.Layout.Layoutable.MeasureCore(Size availableSize) in /_/src/Avalonia.Layout/Layoutable.cs:line 559 at Avalonia.Layout.Layoutable.Measure(Size availableSize) in /_/src/Avalonia.Layout/Layoutable.cs:line 364 at Avalonia.Controls.Grid.MeasureCell(Int32 cell, Boolean forceInfinityV) in /_/src/Avalonia.Controls/Grid.cs:line 1150 at Avalonia.Controls.Grid.MeasureCellsGroup(Int32 cellsHead, Size referenceSize, Boolean ignoreDesiredSizeU, Boolean forceInfinityV, Boolean& hasDesiredSizeUChanged) in /_/src/Avalonia.Controls/Grid.cs:line 1005 at Avalonia.Controls.Grid.MeasureOverride(Size constraint) in /_/src/Avalonia.Controls/Grid.cs:line 427 at Avalonia.Layout.Layoutable.MeasureCore(Size availableSize) in /_/src/Avalonia.Layout/Layoutable.cs:line 559 at Avalonia.Layout.Layoutable.Measure(Size availableSize) in /_/src/Avalonia.Layout/Layoutable.cs:line 364 at Avalonia.Controls.Grid.MeasureCell(Int32 cell, Boolean forceInfinityV) in /_/src/Avalonia.Controls/Grid.cs:line 1150 at Avalonia.Controls.Grid.MeasureCellsGroup(Int32 cellsHead, Size referenceSize, Boolean ignoreDesiredSizeU, Boolean forceInfinityV, Boolean& hasDesiredSizeUChanged) in /_/src/Avalonia.Controls/Grid.cs:line 1005 at Avalonia.Controls.Grid.MeasureOverride(Size constraint) in /_/src/Avalonia.Controls/Grid.cs:line 427 at Avalonia.Layout.Layoutable.MeasureCore(Size availableSize) in /_/src/Avalonia.Layout/Layoutable.cs:line 559 at Avalonia.Layout.Layoutable.Measure(Size availableSize) in /_/src/Avalonia.Layout/Layoutable.cs:line 364 at Avalonia.Layout.Layoutable.MeasureOverride(Size availableSize) in /_/src/Avalonia.Layout/Layoutable.cs:line 625 at Avalonia.Layout.Layoutable.MeasureCore(Size availableSize) in /_/src/Avalonia.Layout/Layoutable.cs:line 559 at Avalonia.Layout.Layoutable.Measure(Size availableSize) in /_/src/Avalonia.Layout/Layoutable.cs:line 364 at Avalonia.Layout.LayoutHelper.MeasureChild(ILayoutable control, Size availableSize, Thickness padding) in /_/src/Avalonia.Layout/LayoutHelper.cs:line 46 at Avalonia.Layout.LayoutHelper.MeasureChild(ILayoutable control, Size availableSize, Thickness padding, Thickness borderThickness) in /_/src/Avalonia.Layout/LayoutHelper.cs:line 39 at Avalonia.Controls.Border.MeasureOverride(Size availableSize) in /_/src/Avalonia.Controls/Border.cs:line 187 at Avalonia.Layout.Layoutable.MeasureCore(Size availableSize) in /_/src/Avalonia.Layout/Layoutable.cs:line 559 at Avalonia.Layout.Layoutable.Measure(Size availableSize) in /_/src/Avalonia.Layout/Layoutable.cs:line 364 at Avalonia.Layout.LayoutHelper.MeasureChild(ILayoutable control, Size availableSize, Thickness padding) in /_/src/Avalonia.Layout/LayoutHelper.cs:line 46 at Avalonia.Layout.LayoutHelper.MeasureChild(ILayoutable control, Size availableSize, Thickness padding, Thickness borderThickness) in /_/src/Avalonia.Layout/LayoutHelper.cs:line 39 at Avalonia.Controls.Presenters.ContentPresenter.MeasureOverride(Size availableSize) in /_/src/Avalonia.Controls/Presenters/ContentPresenter.cs:line 366 at Avalonia.Layout.Layoutable.MeasureCore(Size availableSize) in /_/src/Avalonia.Layout/Layoutable.cs:line 559 at Avalonia.Layout.Layoutable.Measure(Size availableSize) in /_/src/Avalonia.Layout/Layoutable.cs:line 364 at Avalonia.Layout.LayoutHelper.MeasureChild(ILayoutable control, Size availableSize, Thickness padding) in /_/src/Avalonia.Layout/LayoutHelper.cs:line 46 at Avalonia.Controls.Primitives.VisualLayerManager.MeasureOverride(Size availableSize) in /_/src/Avalonia.Controls/Primitives/VisualLayerManager.cs:line 133 at Avalonia.Layout.Layoutable.MeasureCore(Size availableSize) in /_/src/Avalonia.Layout/Layoutable.cs:line 559 at Avalonia.Layout.Layoutable.Measure(Size availableSize) in /_/src/Avalonia.Layout/Layoutable.cs:line 364 at Avalonia.Layout.Layoutable.MeasureOverride(Size availableSize) in /_/src/Avalonia.Layout/Layoutable.cs:line 625 at Avalonia.Layout.Layoutable.MeasureCore(Size availableSize) in /_/src/Avalonia.Layout/Layoutable.cs:line 559 at Avalonia.Layout.Layoutable.Measure(Size availableSize) in /_/src/Avalonia.Layout/Layoutable.cs:line 364 at Avalonia.Layout.Layoutable.MeasureOverride(Size availableSize) in /_/src/Avalonia.Layout/Layoutable.cs:line 625 at Avalonia.Controls.Window.MeasureOverride(Size availableSize) in /_/src/Avalonia.Controls/Window.cs:line 916 at Avalonia.Controls.WindowBase.MeasureCore(Size availableSize) in /_/src/Avalonia.Controls/WindowBase.cs:line 247 at Avalonia.Layout.Layoutable.Measure(Size availableSize) in /_/src/Avalonia.Layout/Layoutable.cs:line 364 at Avalonia.Layout.LayoutManager.Measure(ILayoutable control) in /_/src/Avalonia.Layout/LayoutManager.cs:line 297 at Avalonia.Layout.LayoutManager.ExecuteMeasurePass() in /_/src/Avalonia.Layout/LayoutManager.cs:line 261 at Avalonia.Layout.LayoutManager.InnerLayoutPass() in /_/src/Avalonia.Layout/LayoutManager.cs:line 243 at Avalonia.Layout.LayoutManager.ExecuteLayoutPass() in /_/src/Avalonia.Layout/LayoutManager.cs:line 145 at Avalonia.Layout.LayoutManager.ExecuteQueuedLayoutPass() in /_/src/Avalonia.Layout/LayoutManager.cs:line 104 at Avalonia.Threading.JobRunner.Job.Avalonia.Threading.JobRunner.IJob.Run() in /_/src/Avalonia.Base/Threading/JobRunner.cs:line 181 at Avalonia.Threading.JobRunner.RunJobs(Nullable1 priority) in /
/src/Avalonia.Base/Threading/JobRunner.cs:line 37
at Avalonia.Threading.Dispatcher.RunJobs(DispatcherPriority minimumPriority) in //src/Avalonia.Base/Threading/Dispatcher.cs:line 80
at Avalonia.X11.X11Window.b__103_0() in /
/src/Avalonia.X11/X11Window.cs:line 512
at Avalonia.Threading.JobRunner.Job.Avalonia.Threading.JobRunner.IJob.Run() in //src/Avalonia.Base/Threading/JobRunner.cs:line 181
at Avalonia.Threading.JobRunner.RunJobs(Nullable`1 priority) in /
/src/Avalonia.Base/Threading/JobRunner.cs:line 37
at Avalonia.X11.X11PlatformThreading.HandleX11(CancellationToken cancellationToken) in //src/Avalonia.X11/X11PlatformThreading.cs:line 169
at Avalonia.X11.X11PlatformThreading.RunLoop(CancellationToken cancellationToken) in /
/src/Avalonia.X11/X11PlatformThreading.cs:line 245
at Avalonia.Threading.Dispatcher.MainLoop(CancellationToken cancellationToken) in //src/Avalonia.Base/Threading/Dispatcher.cs:line 65
at Avalonia.Controls.ApplicationLifetimes.ClassicDesktopStyleApplicationLifetime.Start(String[] args) in /
/src/Avalonia.Controls/ApplicationLifetimes/ClassicDesktopStyleApplicationLifetime.cs:line 120
at Avalonia.ClassicDesktopStyleApplicationLifetimeExtensions.StartWithClassicDesktopLifetime[T](T builder, String[] args, ShutdownMode shutdownMode) in /_/src/Avalonia.Controls/ApplicationLifetimes/ClassicDesktopStyleApplicationLifetime.cs:line 209
at Carina.PixelViewer.App.Main(String[] args) in /Users/carina/Studio/PixelViewer/PixelViewer/App.axaml.cs:line 72

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.