У меня есть изображение tiff, и я читаю значения RGB каждого пикселя с помощью следующего кода. Высота изображения: 16198 ширина: 12900.Чтение значений RGB из изображения TIFF в C#
Но код занимает гораздо больше времени (более 20 минут). пробовал различный способ, как преобразовать его в растровое изображение, но не из них ведет к лучшей производительности. любые предложения
using (Tiff tiffreader = Tiff.Open(imgpath, "r"))
{
img.Width = tiffreader.GetField(TiffTag.IMAGEWIDTH)[0].ToInt();
img.Height = tiffreader.GetField(TiffTag.IMAGELENGTH)[0].ToInt();
img.DipX = tiffreader.GetField(TiffTag.XRESOLUTION)[0].ToInt();
img.DipY = tiffreader.GetField(TiffTag.YRESOLUTION)[0].ToInt();
// Reading RGB values
int height = (int)img.Height;
int width = (int)img.Width;
int[] raster = new int[height*width];
var b = tiffreader.ReadRGBAImage(width, height, raster);
img.Pixels = new PColor[height, width];
img.Pixels = Utility.ConvertToRGB(height, width, raster);
}
internal static PColor[,] ConvertToRGB(int height, int width, int[] raster)
{
PColor[,] pcolor = new PColor[height, width];
try
{
for (int i = 0; i < height; ++i)
for (int j = 0; j < width; ++j)
{
int offset = (height - j - 1) * width + i;
PColor color = new PColor();
color.R = Tiff.GetR(raster[offset]);
color.G = Tiff.GetG(raster[offset]);
color.B = Tiff.GetB(raster[offset]);
pcolor[i, j] = color;
}
}
catch(Exception exp)
{
throw exp;
}
return pcolor;
}
Можете ли вы прочитать его в растровом изображении? Вы можете использовать Lockbits для быстрого доступа к нему. Что вы хотите делать с пикселями? – TaW
Я пробовал с Bitmap, не улучшая производительность, я хочу использовать эти значения RGB для региона, растущего дальше вокруг некоторых начальных точек. – Manikanta
Ключ не битмап, а Lockbits. Вы использовали это? Но чтение такого огромного файла в один битмап, вероятно, слишком много – TaW