問題描述
在不了解位圖的情況下開始**
To get total pixels in bitmap height*Width
To get total white pixels Where R==255 & B==255 & G==255
To get total black pixels Where R==0 & B==0 & G==0
To get total grey pixels where R=G=B
其余的將是應該給我的混合顏色.顯然程序會運行數千次,所以我需要使用Lockbits.
Rest of them will be a mixed colours which should give me. Obviously the program will run for thousands of times,so I need to use Lockbits.
當前問題是結果不準確.請建議.嘗試使用 aforge.net 或 imagemagick.net 庫來檢查它是否可以給出準確的結果
current problem is inaccurate result. pls suggest. Trying to use aforge.net or imagemagick.net libraries to check whether it can give accurate results
如何找到位圖中的顏色像素百分比,最初位圖對象來自PDF頁面.我嘗試使用 bitmap.getpixel() 它需要很長時間,LockBits 的性能更好,想知道使用 Lockbits 找到不包括黑色、白色和灰色的彩色像素的百分比.這是為了識別PDF文件中的彩色頁面和打印特定頁面的顏色使用.
How do I find the color pixels percentage in bitmap, originally the bitmap object is from PDF page. I tried with bitmap.getpixel() it is taking ages, LockBits is better in performance, Would like to know using Lockbits finding the percentage of color pixels excluding black, white and grey. This is to identify the colour pages in PDF file and colour usage for printing specific page.
我剛剛有一個代碼來檢測黑白像素的數量,我只是想利用這個代碼來檢測百分比,只需找到總像素,然后差異應該給我彩色像素,不確定方法是否正確!!
I have just got a code to detect the count of black and white pixels, I am just trying to make use of this code to detect percentage just by finding the total pixels and then the difference should give me colour pixels,not sure it is correct approach or not!!
public void ColourPercentage(Bitmap page, ref int nBlackCount, ref int nWhiteCount)
{
System.Drawing.Image image = null;
Bitmap bmpCrop = null;
BitmapData bmpData = null;
byte[] imgData = null;
int n = 0;
try
{
image = page;
bmpCrop = new Bitmap(image);
for (int h = 0; h < bmpCrop.Height; h++)
{
bmpData = bmpCrop.LockBits(new System.Drawing.Rectangle(0, h, bmpCrop.Width, 1),
System.Drawing.Imaging.ImageLockMode.ReadOnly, image.PixelFormat);
imgData = new byte[bmpData.Stride];
System.Runtime.InteropServices.Marshal.Copy(bmpData.Scan0, imgData, 0
, imgData.Length);
bmpCrop.UnlockBits(bmpData);
for (n = 0; n <= imgData.Length - 3; n += 3)
{
if ((int)imgData[n] == 000 && (int)imgData[n + 1] == 0 && (int)imgData[n + 2] == 000)// R=0 G=0 B=0 represents Black
{
nBlackCount++;
}
else if ((int)imgData[n] == 255 && (int)imgData[n + 1] == 255 && (int)imgData[n + 2] == 255) //R=255 G=255 B=255 represents White
{
nWhiteCount++;
}
else if ((int)imgData[n] == (int)imgData[n + 1] && (int)imgData[n + 1] == (int)imgData[n + 2])
nBlackCount++;
}
}
}
catch (Exception ex)
{
System.Windows.MessageBox.Show(ex.Message);
}
}
<小時>
public void blackwhiteCount(Bitmap page, ref int nBlackCount, ref int nWhiteCount)
{
System.Drawing.Color pixel;
try
{
for (int i = 0; i < page.Height; i++)
{
for (int j = 0; j < page.Width; j++)
{
pixel = page.GetPixel(i, j);
if (pixel.R == 0 && pixel.G == 0 && pixel.B == 0)
nBlackCount++;
else if (pixel.R == 255 && pixel.G == 255 && pixel.B == 255)
nWhiteCount++;
}
}
}
catch (Exception ex)
{
System.Windows.MessageBox.Show("Unable to parse image " + ex);
}
}
<小時>
ColourPercentage(page, ref nblack, ref nwhite);
double nTotal = page.Width * page.Height;
string blackper, whiteper, colourper;
double black =(double) nblack*100 / nTotal;
double white =(double) nwhite *100 / nTotal;
double colour = 100 - (black + white);
推薦答案
我找到了自己,為了方便瀏覽者重新使用,添加更正(問題已經更新了答案).
I have found myself, for viewers convenience for re usage, adding the correction(Question is updated with the answer already).
要獲得總像素,請使用圖像尺寸,而不是計算 bitlockdata 中的循環(huán)像素.
To get total pixels use image dimensions, instead of counting the looping pixels in bitlockdata.
Image page= new Image(filePath);
double nTotal = page.Width * page.Height;
這篇關于位圖中的顏色百分比的文章就介紹到這了,希望我們推薦的答案對大家有所幫助,也希望大家多多支持html5模板網!