Update to newer version of CSJ2K from github.com/cureos/csj2k with modification
This commit is contained in:
146
CSJ2K/Util/WriteableBitmapImageSource.cs
Normal file
146
CSJ2K/Util/WriteableBitmapImageSource.cs
Normal file
@@ -0,0 +1,146 @@
|
||||
// Copyright (c) 2007-2016 CSJ2K contributors.
|
||||
// Licensed under the BSD 3-Clause License.
|
||||
|
||||
namespace CSJ2K.Util
|
||||
{
|
||||
using System;
|
||||
using System.Windows.Media;
|
||||
using System.Windows.Media.Imaging;
|
||||
|
||||
using CSJ2K.j2k.image;
|
||||
using CSJ2K.j2k.image.input;
|
||||
|
||||
internal class WriteableBitmapImageSource : ImgReader
|
||||
{
|
||||
#region FIELDS
|
||||
|
||||
private readonly WriteableBitmap wbm;
|
||||
|
||||
private readonly int rb;
|
||||
|
||||
private readonly int redIdx;
|
||||
|
||||
private readonly int greenIdx;
|
||||
|
||||
private readonly int blueIdx;
|
||||
|
||||
private readonly int pixelSize;
|
||||
|
||||
private readonly bool isPremultiplied;
|
||||
|
||||
#endregion
|
||||
|
||||
#region CONSTRUCTORS
|
||||
|
||||
private WriteableBitmapImageSource(WriteableBitmap wbm)
|
||||
{
|
||||
this.wbm = wbm;
|
||||
this.w = wbm.PixelWidth;
|
||||
this.h = wbm.PixelHeight;
|
||||
this.nc = GetNumberOfComponents(wbm.Format);
|
||||
this.rb = GetRangeBits(wbm.Format);
|
||||
|
||||
this.DefineHelpers(wbm.Format);
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region METHODS
|
||||
|
||||
public override void close()
|
||||
{
|
||||
// Do nothing.
|
||||
}
|
||||
|
||||
public override bool isOrigSigned(int c)
|
||||
{
|
||||
if (c < 0 || c >= this.nc)
|
||||
{
|
||||
throw new ArgumentOutOfRangeException("c");
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
public override int getFixedPoint(int c)
|
||||
{
|
||||
if (c < 0 || c >= this.nc)
|
||||
{
|
||||
throw new ArgumentOutOfRangeException("c");
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
public override DataBlk getInternCompData(DataBlk blk, int c)
|
||||
{
|
||||
if (c < 0 || c >= this.nc)
|
||||
{
|
||||
throw new ArgumentOutOfRangeException("c");
|
||||
}
|
||||
|
||||
blk.offset = 0;
|
||||
blk.scanw = blk.w;
|
||||
blk.progressive = false;
|
||||
blk.Data = this.GetDataArray(blk.ulx, blk.uly, blk.w, blk.h);
|
||||
|
||||
return blk;
|
||||
}
|
||||
|
||||
public override DataBlk getCompData(DataBlk blk, int c)
|
||||
{
|
||||
var newBlk = new DataBlkInt(blk.ulx, blk.uly, blk.w, blk.h);
|
||||
return this.getInternCompData(newBlk, c);
|
||||
}
|
||||
|
||||
public override int getNomRangeBits(int c)
|
||||
{
|
||||
if (c < 0 || c >= this.nc)
|
||||
{
|
||||
throw new ArgumentOutOfRangeException("c");
|
||||
}
|
||||
|
||||
return this.rb;
|
||||
}
|
||||
|
||||
public static ImgReader Create(object imageObject)
|
||||
{
|
||||
var wbm = imageObject as WriteableBitmap;
|
||||
return wbm == null ? null : new WriteableBitmapImageSource(wbm);
|
||||
}
|
||||
|
||||
private void DefineHelpers(PixelFormat format)
|
||||
{
|
||||
throw new NotImplementedException();
|
||||
}
|
||||
|
||||
private Array GetDataArray(int x0, int y0, int w, int h)
|
||||
{
|
||||
throw new NotImplementedException();
|
||||
}
|
||||
|
||||
private static int GetNumberOfComponents(PixelFormat format)
|
||||
{
|
||||
if (format.Equals(PixelFormats.BlackWhite) || format.Equals(PixelFormats.Gray8))
|
||||
{
|
||||
return 1;
|
||||
}
|
||||
|
||||
if (format.Equals(PixelFormats.Bgra32) || format.Equals(PixelFormats.Bgr24)
|
||||
|| format.Equals(PixelFormats.Bgr32) || format.Equals(PixelFormats.Pbgra32)
|
||||
|| format.Equals(PixelFormats.Rgb24))
|
||||
{
|
||||
return 3;
|
||||
}
|
||||
|
||||
throw new ArgumentOutOfRangeException("format");
|
||||
}
|
||||
|
||||
private static int GetRangeBits(PixelFormat format)
|
||||
{
|
||||
return format.BitsPerPixel;
|
||||
}
|
||||
|
||||
#endregion
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user