我一直在尝试从16位灰度图像(.PNG)读取像素值,但我无法提取16位值。它们总是以8位值出现。
使用此代码可以很好地加载图像:
PngImage := TPngImage.Create;
PngImage.LoadFromFile(ImageFile);
和
PngImage.Header.ColorType returns: COLOR_GRAYSCALE
PngImage.Header.BitDepth returns: 16
然后我宣布变量:
pngrowdata,extrapngrowdata: pWordArray;
并使用以下方式阅读:
PngRowData := PngImage.Scanline[y];
ExtraPngRowData := PngImage.ExtraScanline[y];
其中y
是图片中的行号。
问题在于,对于x PngRowData [x]的所有值都与ExtraPngRowData [x]相同,即我没有得到16位值的高字节和低字节。 Embarcadero帮助文件中的Extrascanline文档缺乏,只是声明此函数用于读取第二个字节 16位像素和Scanline用于读取第一个字节
有没有人有线索?只是为了检查使用的图像,我可以将其加载到ImageJ,在该程序中,像素可以很好地读取为16位整数。
克劳斯