像素按順序存儲在PNG中(2種變體 - 原始和亞當交錯)。有RFC 2083,它描述了這些佈局變體。我想了解如何將流中的像素位置轉換爲位圖中的位置。如何使用pngcs中的像素填充位圖對象?
存在一些障礙 - 序列號取決於圖像的尺寸(在隔行掃描模式下,某些像素可能會跳過,因爲它們超出了範圍)。
如何清楚地實現這一點,或者做好現成的實施?
像素按順序存儲在PNG中(2種變體 - 原始和亞當交錯)。有RFC 2083,它描述了這些佈局變體。我想了解如何將流中的像素位置轉換爲位圖中的位置。如何使用pngcs中的像素填充位圖對象?
存在一些障礙 - 序列號取決於圖像的尺寸(在隔行掃描模式下,某些像素可能會跳過,因爲它們超出了範圍)。
如何清楚地實現這一點,或者做好現成的實施?
如果您使用的是pngcs,您將會收到一個表示像素數據的整數數組,而不需要關心交織。
然後很容易,看看https://github.com/leonbloy/pngcs/blob/master/SamplesTests/SampleTileImage.cs的例子,每個X整數都是一個像素,X由通道數量定義,所以每個整數都是一個像素的一個分量,這意味着每行有[components * imageWidth]整數。
爲了重建數據然後for循環雙就足夠,這裏爲四個分量的PNG(RGBA)的例子:
int componentSize = 4;
int lineSize = componentSize * imageWidth;
int linesOnImage = imageData.Length/lineSize;
for(int y = 0; y < linesOnImage; y++)
{
for(int x = 0; x < imageWidth; x++)
{
int startPixel = y * lineSize + (x * componentSize);
Color c = Color.FromArgb(imageData[startPixel + 3], imageData[startPixel], imageData[startPixel + 1], imageData[startPixel + 2]);
//Do whatever you need to do with the pixel, you have X and Y coordinates and the color
}
}
說明用於顏色的第一參數是的最後一個組件作爲Color的像素期望ARGB輸入,而PNG使用RGBA順序。
替換它們https://github.com/leonbloy/pngcs/issues/12#issuecomment-186565845 – user1709408
http://stackoverflow.com/questions/35522932 – user1709408
你想做什麼?如果你想直接讀取一個PNG文件,它不是像素數據,它是壓縮和編碼的,經過解壓縮和解碼後,你將獲得像素數據,所有這些都可以自動完成,只需使用Image.FromFile ... – Gusman
https://github.com/leonbloy/pngcs/issues/12 – user1709408
你在搞混合事情,你在幫助中指出的類沒有像讀png,它需要一個*已經加載* PNG並操縱它。再次,閱讀PNG並不只是讀取像素數據,它是LZH壓縮和RLE編碼,更好地採取一個託管的預製課程,而不是自己做,像pngcs,它已經返回像素數據 – Gusman