Comment charger une partie d'une image * .tif sans charger cette image dans la mémoire.Comment charger une partie d'une image TIFF sans charger l'image entière en mémoire?
Je dois travailler avec de gros fichiers TIFF. (> 4 Go). J'ai essayé de lire ce fichier en utilisant BinaryReader
, et en utilisant BitMiracle.LibTiff.Classic
pour convertir des octets en image. Mais je n'ai pas trouvé d'exemple pour savoir comment lire un pixel spécifique dans un fichier TIFF.
Peut-être avez-vous une solution pour cette tâche.
Disons que j'ai un fichier BigScan.tif
et il est toujours:
Image Compression - NONE
Pixel Order - Interleaved (RGBRGB)
Byte Order - IBM PC
J'ai une variable:
ImagePart with User Defined Width
ImagePart with User Define Height
ImagePArt with User Defined Location
La question est, comment pourrais-je obtenir ImagePart
de BigScan.tif
?
Mais il serait préférable d'avoir la possibilité de lire l'information du pixel dans "BigScan.tif" avec (x, y) coorinates.
J'ai besoin de lire un pixel de l'BigScan.tif
en place spécifiée, avec une telle fonction:
public Color GetPixelColorFromTiffImage(string TiffFileName, int PixelPositionX, int PixelPositionY)
{
//Some Code
return returnedColor;
}
Très étrange, mais le did`t de soutien unswer mon quastion. Peut-être que quelqu'un le sait. Pourquoi doser cette partie du code de BitMiracle Samples pour écrire des numéros de tableau 'raster' comme "-11512229", "-11838376" et ainsi de suite.
using (Tiff image = Tiff.Open(fullImageLocation, "r"))
{
// Find the width and height of the image
FieldValue[] value = image.GetField(TiffTag.IMAGEWIDTH);
width = value[0].ToInt();
value = image.GetField(TiffTag.IMAGELENGTH);
height = value[0].ToInt();
int imageSize = height * width;
int[] raster = new int[imageSize];
// Read the image into the memory buffer
if (!image.ReadRGBAImage(width, height, raster))
{
MessageBox.Show("Could not read image");
}
using (Bitmap btm = new Bitmap(200, 200))
{
for (int i = 0; i < btm.Width; ++i)
for (int j = 0; j < btm.Height; ++j)
btm.SetPixel(i, j, getSample(i + 330, j + 30, raster, width, height));
ReternedBitmap = btm;
}
}//using
Est-ce que cela aide? http://bitmiracle.com/libtiff/help/how-to-read-tiff-scanlines-in-a-random-fashion.aspx –
Eh bien j'ai vu cette page. Mais je me demande toujours comment cela peut aider. Comment, en utilisant cela, possible de définir la position du pixel, et lire les données du fichier tif principal? –
Il vous permet de lire n'importe quel nombre de scalines de l'image - de sorte que vous pouvez au moins choisir une rangée de rangées (coordonnées y), même si vous devez prendre toute la largeur (coordonnées x) - peut-être cela aide-t-il? –