BioGTK 6.3.0
dotnet add package BioGTK --version 6.3.0
NuGet\Install-Package BioGTK -Version 6.3.0
<PackageReference Include="BioGTK" Version="6.3.0" />
<PackageVersion Include="BioGTK" Version="6.3.0" />
<PackageReference Include="BioGTK" />
paket add BioGTK --version 6.3.0
#r "nuget: BioGTK, 6.3.0"
#:package BioGTK@6.3.0
#addin nuget:?package=BioGTK&version=6.3.0
#tool nuget:?package=BioGTK&version=6.3.0
BioGTK
A .NET application & library for editing & annotating various microscopy image formats. Supports all bioformats supported images. Integrates with ImageJ, running ImageJ filters & macro functions. Check out the wiki for library usage. or check out the documentation. Supports Windows, Linux and Mac. For Windows & Mac see installation instructions. For Discussion check out the new Discord Server. https://discord.gg/tdeyc6fgpv
Features
- C# scripting with sample tool-script and other sample scripts in "/Scripts/" folder. See samples. 
- Supports running ImageJ macro commands on images open in Bio. Console to run ImageJ macro commands and Bio C# scripts. 
- Supports viewing & creating pyramidal images with multiple resolutions. Like whole slide images. 
- Stitch images at varying resolutions into single pyramidal image with multiple resolutions. 
- Multiple view modes like Emission, and Filtered. ROI's shown for each channel can be configured in ROI Manager. 
- Supports drawing shapes & colors onto 16 bit & 48 bit images, unlike System.Drawing.Graphics. 
- Convenient viewing of image stacks with scroll wheel moving Z-plane and mouse side buttons scrolling C-planes. 
- Editing & saving ROI's in images to OME format image stacks. 
- Copy & Paste to quickly annotate images and name them easily by right click. 
- Select multiple points by holding down control key, and move them by holding down control key. 
- Exporting ROI's from each OME image in a folder of images to CSV. 
- Easy segmentation with Segment Anything 2 (SAM-2) or Micro-SAM. Download required model files from here for SAM-2. and here for Micro-SAM placing them in the "StartUpPath" folder of the program. 
Dependencies
- BioFormats.NET8 GPL3
- IKVM License
- AForge LGPL
- LibTiff.Net BSD
- Cs-script MIT
- ImageJ (Only needed when running ImageJ macro commands)
- ScottPlot MIT
- LibVips (Optional) LGPL
- Segment-Anything-CSharp (Optional) Apache License 2.0
- ONNX-SAM2-Segment-Anything (Optional) MIT
- OpenSlideGTK (Optional) MIT
Scripting
- Save scripts into "StartupPath/Scripts" with ".cs" ending.
- Open script editor and recorder from menu.
- Scripts saved in Scripts folder will be loaded into script runner.
- Use Script recorder to record program function calls and script runner to turn recorder text into working scripts. (See sample scripts
Plugins
- Save plugin DLL's into "StartupPath/Plugins"
- Add plugins from Github repositories by clicking Update and add the url of the repository which you want to add.
- See example plugin to create your own plugins.
- Add the BioGTK plugin repository "https://github.com/BiologyTools/BioGTK-Plugins" to your updater list.
Models
- Save models into "StartupPath/Models" supports BioImage.IO models.
- Supports ONNX (".onnx") and PyTorch models (".pt"). For PyTorch models include the ".yaml" metadata file with the same name as the model file in the models folder.
Mac installation,
- See this video or follow the instructions below.
- Install Mac package manager homebrew.
- From brew install GTK3.
- Download the BioGTK application for either OSX-x64 or OSX-Arm from releases.
- Make the .app bundle executable by opening terminal in the Contents/MacOS folder then run "chmod 755 BioGTKApp" then drag it into the applications folder.
- Optionally install OpenSlide for better navigation of whole-slide-images.
- Optionally install LibVips for increased performance and functions with whole-slide-images.
- Optionally for SAM install ONNX Runtime by running "brew install onnxruntime".
Windows Installation
- See this video or follow the instructions below.
- Install package manager MSYS2. to install package GTK3. (Required for GTK Apps.)
- Download the BioGTK Windows installer from releases.
- Optionally install OpenSlide for better navigation of whole-slide-images. Be sure to set the PATH variable correctly.
- Optionally install CUDA for hardware accelerated stitching as well as tile cache in graphics card memory instead of RAM.
- Optionally install PyTorch for running BioImage.io models.
Linux Installation
- See this video or follow the instructions below.
- Download the latest tarball(tar.gz) from Releases as linux already includes GTK3 package.
- Extract the tarball and go to the "Glade" folder and select all the glade files and change permissions to read-write.
- Optionally install LibVips for increased performance and functions with whole-slide-images.
- Optionally install OpenSlide for better navigation of whole-slide-images.
- Optionally install CUDA for hardware accelerated stitching as well as tile cache in graphics card memory instead of RAM.
- Optionally install PyTorch for running BioImage.io models.
Examples
First you need to setup your project as a GTK project with .NET 8.0 as the target. Then in between Gtk.Application.Init() and Gtk.Application.Run() use the library as you please. Here is an example for opening a new NodeView from BioGTKApp program.cs.
Console.WriteLine("Initializing GTK.");
Gtk.Application.Init();
Console.WriteLine("Creating NodeView.");
BioGTK.NodeView node = BioGTK.NodeView.Create(args);
node.Show();
Gtk.Application.Run();
Another example on how to open an image with a new ImageView
Gtk.Application.Init();
//Since we will be using the GUI we call App.Initialize();
App.Initialize();
BioImage bm = BioImage.OpenFile("F:\\TESTIMAGES\\CZI\\16Bit-ZStack.czi");
ImageView v = ImageView.Create(bm);
v.Show();
Gtk.Application.Run();
Usage
//If you want to initialize the application call app initialize. 
//This will initialize Bioformats library as well as the rest of the application.
App.Initialize();
//Or you can create a new NodeView which will initialize the application
//as well as parse any command line arguments.
NodeView nodes = NodeView.Create(new string[]{"file"});
//You can also call BioImage.Initialize to 
//initialize just the Bioformats library.
BioImage.Initialize();
//Once initialized you can open OME, ImageJ tiff files, and Bio Tiff files with:
BioImage b = BioImage.OpenFile("file");
//Or if you want to use specifically the OME image reader you can use BioImage.OpenOME
BioImage b = BioImage.OpenOME("file");
//If you are working with a pyramidal image you can open a portion of a tiled image with OpenOME.
//BioImage.OpenOME(string file, int serie, bool tab, bool addToImages, bool tile, int tilex, int tiley, int tileSizeX, int tileSizeY)
//You can specify whether to open in a newtab as well as whether to add the image to 
//the Images.images table. As well as specify whether to open as a tile with the specified 
//tile X,Y position & tile width & height.    
BioImage.OpenOME("file",0,false,false,true,0,0,600,600);
//This will open a portion of the image as a tile and won't add it to the Images table.
//Once you have opened a tiled image with BioImage.OpenOME you can call the 
//GetTile(BioImage b, ZCT coord, int serie, int tilex, int tiley, int tileSizeX, int tileSizeY) method
// to quickly get another tile from different portion of the image. For BioGTK & BioLib
Bitmap bm = GetTile(b, new ZCT(0,0,0), 0, 100, 100, 600, 600);
//You can display an image with the ImageView control which can display
// Pyramidal, Whole-Slide, and Series of images.
ImageView v = ImageView.Create(b);
//To get the current coordinate of the ImageView you can call GetCoordinate.
ZCT cord = v.GetCoordinate();
//or to set the current coordinate
v.SetCoordinate(new ZCT(1,1,1));
//To create a point as well as any other ROI type you can call the ROI create methods.
ROI p = ROI.CreatePoint(cord, 0, 0);
ROI rect = ROI.CreateRectangle(cord, 0, 0, 100, 100);
//Usage of Graphics class for 16 & 48 bit images as well as regular bit depth images
//is very similar to System.Graphics.
//We create a new Graphics object by passing the Bitmap for BioGTK & BioLib and BufferInfo for BioCore
Graphics g = Graphics.FromImage(b.Buffers[0]);
//Then we create a pen by passing a ColorS which represent a Color with, 
//a higher bit depth (unsigned short) rather than a byte.
g.pen = new Pen(new ColorS(ushort.MaxValue, ushort.MaxValue, ushort.MaxValue));
//Then we can call the familiar methods DrawLine, DrawPolygon, FillPolygon etc.
g.DrawLine(0,0,100,100);
//Finally we dispose the Graphics object.
g.Dispose();
//Then to update the image in the viewer once we have made changes to the image we call:
v.UpdateImage();
//This will update the images of the viewer in the current coordinate plane.
v.UpdateView();
//We can also save the resulting image given the ID of the image in the Images table.
//All images opened with BioImage.OpenFile or BioImage.OpenOME are added to the 
//Images.images table with the filename as an ID.
BioImage.SaveFile("file","path");
//To convert between different pixel formats we can call for example To24Bit.
b.To24Bit();
Sample Plugin
using AForge;
using BioGTK;
using Gdk;
using Gtk;
using SkiaSharp.Views.Desktop;
namespace PluginExample
{
    public class PluginExample : BioGTK.Plugin.IPlugin
    {
        public string Name => "PluginExample";
        public string MenuPath => "Tools/" + Name + ".dll";
        public bool ContextMenu => false;
        public void Execute(string[] args)
        {
        }
        public void KeyUpEvent(object o, KeyPressEventArgs e)
        {
        }
        public void KeyDownEvent(object o, KeyPressEventArgs e)
        {
        }
        public void ScrollEvent(object o, ScrollEventArgs args)
        {
        }
        public void Render(object sender, SKPaintSurfaceEventArgs e)
		{
		}
        public void MouseMove(object o, PointD e, MotionNotifyEventArgs buts)
        {
        }
        public void MouseUp(object o, PointD e, ButtonReleaseEventArgs buts)
        {
        }
        public void MouseDown(object o, PointD e, ButtonPressEventArgs buts)
        {
        }
        
    }
}
Sample Tool Script
//css_reference BioGTK.dll; 
using System; 
using BioGTK;
using System.Threading;
using AForge;
using Gdk;
public class Loader {
//Point ROI Tool Example
public string Load()
{
	int ind = 1;
	do
	{
		BioGTK.Scripting.State s = BioGTK.Scripting.GetState();
		if (s != null)
		{
			if (!s.processed)
			{
				if (s.type == BioGTK.Scripting.Event.Down && s.buts == 1)
				{
					ZCT cord = BioGTK.App.viewer.GetCoordinate();
					BioGTK.Scripting.LogLine(cord.ToString() + " Coordinate");
					BioGTK.ROI an = BioGTK.ROI.CreatePoint(cord, s.p.X, s.p.Y);
					BioGTK.ImageView.SelectedImage.Annotations.Add(an);
					BioGTK.Scripting.LogLine(cord.ToString() + " Coordinate");
					an.Text = "Point" + ind;
					ind++;
					BioGTK.Scripting.LogLine(s.ToString() + " Point");
				}
				else
				if (s.type == BioGTK.Scripting.Event.Up)
				{
					BioGTK.Scripting.LogLine(s.ToString());
				}
				else
				if (s.type == BioGTK.Scripting.Event.Move)
				{
					BioGTK.Scripting.LogLine(s.ToString());
				}
				if(s.key == Key.r)
				{
					BioGTK.Scripting.LogLine("KeyDown");
				}
				s.processed = true;
			}
		}
		if(BioGTK.Scripting.Exit("test.cs"))
		{	
			return "OK";
		}
	} while (true);
	return "OK";
}
}
| Product | Versions Compatible and additional computed target framework versions. | 
|---|---|
| .NET | net8.0 is compatible. net8.0-android was computed. net8.0-browser was computed. net8.0-ios was computed. net8.0-maccatalyst was computed. net8.0-macos was computed. net8.0-tvos was computed. net8.0-windows was computed. net9.0 was computed. net9.0-android was computed. net9.0-browser was computed. net9.0-ios was computed. net9.0-maccatalyst was computed. net9.0-macos was computed. net9.0-tvos was computed. net9.0-windows was computed. net10.0 was computed. net10.0-android was computed. net10.0-browser was computed. net10.0-ios was computed. net10.0-maccatalyst was computed. net10.0-macos was computed. net10.0-tvos was computed. net10.0-windows was computed. | 
- 
                                                    net8.0- BioLib (>= 3.6.2)
- Flurl (>= 4.0.0)
- Flurl.Http (>= 4.0.2)
- ImageJ.NET (>= 154.0.0.2)
- ManagedCuda.NETStandard (>= 9.1.300)
- MathNet.Numerics (>= 5.0.0)
- Microsoft.ML.OnnxRuntime (>= 1.20.1)
- Microsoft.ML.TorchSharp (>= 0.22.1)
- Newtonsoft.Json (>= 13.0.3)
- ScottPlot (>= 5.0.53)
- SkiaSharp (>= 3.116.1)
- SkiaSharp.NativeAssets.Linux (>= 3.116.1)
- SkiaSharp.NativeAssets.macOS (>= 3.116.1)
- SkiaSharp.NativeAssets.Win32 (>= 3.116.1)
- SkiaSharp.Views.Gtk3 (>= 3.116.1)
- TorchSharp-cpu (>= 0.105.0)
- YamlDotNet (>= 16.3.0)
 
NuGet packages
This package is not used by any NuGet packages.
GitHub repositories
This package is not used by any popular GitHub repositories.
| Version | Downloads | Last Updated | 
|---|---|---|
| 6.3.0 | 205 | 6/23/2025 | 
| 6.2.0 | 175 | 1/20/2025 | 
| 6.1.1 | 137 | 1/8/2025 | 
| 6.1.0 | 168 | 1/6/2025 | 
| 6.0.0 | 154 | 12/17/2024 | 
| 5.9.0 | 133 | 12/10/2024 | 
| 5.8.2 | 116 | 12/3/2024 | 
| 5.8.1 | 94 | 12/2/2024 | 
| 5.8.0 | 126 | 11/26/2024 | 
| 5.7.1 | 112 | 11/18/2024 | 
| 5.7.0 | 79 | 11/17/2024 | 
| 5.6.0 | 121 | 10/29/2024 | 
| 5.5.0 | 134 | 10/19/2024 | 
| 5.4.2 | 119 | 10/10/2024 | 
| 5.4.1 | 96 | 10/1/2024 | 
| 5.4.0 | 125 | 9/29/2024 | 
| 5.3.0 | 135 | 8/21/2024 | 
| 5.2.0 | 121 | 7/26/2024 | 
| 5.1.1 | 105 | 5/7/2024 | 
| 5.1.0 | 93 | 4/29/2024 | 
| 5.0.1 | 105 | 4/21/2024 | 
| 5.0.0 | 108 | 4/17/2024 | 
| 4.9.0 | 112 | 3/8/2024 | 
| 4.8.1 | 121 | 3/6/2024 | 
| 4.8.0 | 214 | 3/6/2024 | 
| 4.7.1 | 176 | 2/27/2024 | 
| 4.7.0 | 160 | 2/25/2024 | 
| 4.6.0 | 203 | 2/19/2024 | 
| 4.5.2 | 198 | 2/17/2024 | 
| 4.5.1 | 181 | 2/15/2024 | 
| 4.5.0 | 211 | 2/13/2024 | 
| 4.4.0 | 179 | 2/10/2024 | 
| 4.3.0 | 181 | 2/2/2024 | 
| 4.2.0 | 259 | 1/14/2024 | 
| 4.1.0 | 289 | 1/4/2024 | 
| 4.0.0 | 214 | 12/26/2023 | 
| 3.9.1 | 218 | 12/2/2023 | 
| 3.9.0 | 208 | 12/1/2023 | 
| 3.8.1 | 239 | 11/8/2023 | 
| 3.8.0 | 197 | 11/2/2023 | 
| 3.7.1 | 391 | 10/26/2023 | 
| 3.7.0 | 398 | 10/22/2023 | 
| 3.6.2 | 441 | 8/30/2023 | 
| 3.6.1 | 423 | 8/22/2023 | 
| 3.6.0 | 498 | 8/19/2023 | 
| 3.5.3 | 417 | 8/17/2023 | 
| 3.5.1 | 459 | 8/12/2023 | 
| 3.5.0 | 568 | 8/10/2023 | 
| 3.4.0 | 449 | 8/6/2023 | 
| 3.3.3 | 537 | 8/4/2023 | 
| 3.3.2 | 497 | 8/1/2023 | 
| 3.3.1 | 504 | 7/6/2023 | 
| 3.3.0 | 445 | 7/4/2023 | 
| 3.2.0 | 488 | 6/29/2023 | 
| 3.1.1 | 452 | 6/28/2023 | 
| 3.0.0 | 426 | 6/20/2023 | 
| 2.9.0 | 442 | 6/13/2023 | 
| 2.8.0 | 442 | 5/15/2023 | 
| 2.7.2 | 458 | 5/5/2023 | 
| 2.7.1 | 474 | 4/29/2023 | 
| 2.7.0 | 465 | 4/29/2023 | 
| 2.6.2 | 614 | 4/3/2023 | 
| 2.6.1 | 582 | 4/1/2023 | 
| 2.6.0 | 571 | 3/12/2023 | 
| 2.5.0 | 594 | 3/7/2023 | 
| 2.4.1 | 579 | 3/4/2023 | 
| 2.4.0 | 649 | 2/28/2023 | 
| 2.3.0 | 582 | 2/27/2023 | 
| 2.2.0 | 371 | 2/23/2023 | 
| 2.1.1 | 379 | 2/17/2023 | 
| 2.1.0 | 361 | 2/15/2023 | 
| 1.2.0 | 403 | 1/31/2023 | 
| 1.1.0 | 379 | 1/29/2023 | 
| 1.0.0 | 409 | 1/29/2023 | 
Bug fixes and dependency updates.