[英]Magick++ C++ Input 16-bit Greyscale PNG
我有一系列的PNG文件,這些文件都是16位灰度格式。 我使用Magick ++加載並以8位格式訪問數據沒有問題(這樣做主要是因為所有代碼都在那里,無需更改)。
magick_image->write(0, 0, grey->GetWidth(), grey->GetHeight(), "R", Magick::CharPixel, grey->GetBeginData());
請注意,灰色在我們自己的圖像存儲容器中,但是內存布局只是一個預先分配的內存塊。
現在有人告訴我,我們需要訪問整個16位范圍,但我不太確定該怎么做。 我想我不會使用Magick :: CharPixel,但是文檔中描述的其他對象並沒有指定它們實際的位數。
因此,我需要能夠執行以下操作:
有人能幫忙嗎?
有幾種方法可以執行此操作,但是在沒有看到magick_image
和grey
的定義的magick_image
,此答案基於一些假設。
要使用准骨灰grey
,我認為可以將其定義為...
struct MaybeGray {
std::vector<u_int16_t> blob;
size_t width;
size_t height;
MaybeGray(size_t w, size_t h) : blob(w * h) { width = w; height = h; };
size_t getWidth() { return width; };
size_t getHeight() { return height; };
void * getBeginData() { return blob.data(); } // C11? Is this allowed?
};
接下來,我將創建一個2x2的畫布圖像來滿足magick_image
。
Magick::Image magick_image;
Magick::Geometry size(2, 2);
magick_image.size(size);
magick_image.read("XC:blue");
// Apply gray scale (Magick::Image.quantize may be better.)
magick_image.type(Magick::GrayscaleType);
首先確定它是否為16位圖像
Magick::Image.depth
可用於識別和設置深度值。
const size_t DEPTH = 16;
if ( magick_image.depth() != DEPTH ) {
magick_image.depth(DEPTH);
}
從Magick :: Image類中讀取出一個內存塊,該內存塊將映射到u_int16_t的內存塊中
您使用Magick::Image.write
是正確的。 但是Magick::CharPixel
將適用於8位,256種顏色的深度。 對於16位,請使用Magick::ShortPixel
。
struct MaybeGray gray(2, 2);
magick_image.write(0, 0,
gray.getWidth(),
gray.getHeight(),
"R",
Magick::ShortPixel,
gray.getBeginData());
XC:red
圖像畫布應使用0xFFFF
填充斑點,而XC:black
則應使用0x0000
填充斑點。 使用ImageMagick的convert
& identify
實用程序來創建預期的結果。
# Create identical canvas
convert -size 2x2 xc:blue -colorspace gray -depth 16 blue.tiff
# Dump info
identify -verbose blue.tiff
Image: blue.tiff
Format: TIFF (Tagged Image File Format)
Class: DirectClass
Geometry: 2x2+0+0
Units: PixelsPerInch
Type: Grayscale
Base type: Grayscale
Endianess: LSB
Colorspace: Gray
Depth: 16/14-bit
Channel depth:
gray: 14-bit
Channel statistics:
Gray:
min: 4732 (0.0722057)
max: 4732 (0.0722057)
mean: 4732 (0.0722057)
standard deviation: 0 (0)
kurtosis: 0
skewness: 0
Colors: 1
Histogram:
4: ( 4732, 4732, 4732) #127C127C127C gray(7.22057%)
# ... rest omitted
詳細信息確認我具有16位灰度圖像,直方圖通知我MaybeGrey.blob
將填充4 0x127C
。
是的
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.