में खाली है या नहीं, मैंने हर जगह देखा है, लेकिन यह देखने के लिए कि कोई छवि खाली है या नहीं, यह एक मानक (मैं देख सकता हूं) नहीं लगता है। सी #यह देखने के लिए जांच कर रहा है कि कोई छवि C#
मेरे पास ऐसा करने का एक तरीका है, लेकिन यह जानना अच्छा होगा कि कोई छवि खाली है या नहीं, इसलिए भविष्य में हर कोई भी जान सकता है।
मैं कोड की एक गुच्छा पेस्ट करने के लिए नहीं जा रहा हूं, अगर आप मुझे चाहते हैं, तो यह मेरी खुशी होगी, लेकिन मैं बस यह बताना चाहता हूं कि मैं यह देखने के लिए कैसे जाता हूं कि कोई छवि खाली है या नहीं।
आप एक .jpg छवि लेते हैं, इसकी चौड़ाई प्राप्त करें। उदाहरण के लिए 500 पिक्सेल तो फिर तुम कि 2 आप 250
देकर तो फिर तुम जाँच क्या हर पिक्सेल के रंग के स्थान में है (250 चौड़ाई, और मैं ऊंचाई) (जहां पुनरावृति के hight सोचा विभाजित छवि
यह तब होता है जो केवल छवि के पिक्सेल की मध्य रेखा को लंबवत रूप से जांचता है। हालांकि यह सभी पिक्सल यह देखने के लिए जांच कर रहा है कि रंग कुछ भी सफेद है या नहीं। मैंने ऐसा किया है ताकि आपके पास ऐसा न हो सभी 500 * पिक्सेल की ऊंचाई को खोजने के लिए और चूंकि आप लगभग हमेशा पृष्ठ के मध्य में एक रंग भरेंगे।
यह काम कर रहा है ... थोड़ा धीमा होना चाहिए ... वहां होना चाहिए ऐसा करने का बेहतर तरीका? आप उस पृष्ठ को स्पॉट करने का मौका बढ़ाने के लिए लंबवत रूप से 2/3/4 लाइनों को खोजने के लिए इसे बदल सकते हैं जो रिक्त नहीं है, लेकिन इसमें और भी समय लगेगा।
(यह भी ध्यान रखें, अगर यह कुछ इस मामले में काम नहीं करेगा शामिल हैं जाँच करने के लिए छवि का आकार का उपयोग करते हुए, के बाद से एक रिक्त पृष्ठ के आकार पर दो वाक्यों और के साथ एक पृष्ठ भी एक दूसरे के करीब है)
समाधान के बाद जोड़ा गया है।
समाधान के कार्यान्वयन और समझ में सहायता के लिए संसाधन। सिर्फ उल्लेख के छोटे त्रुटि मुझे पता है, हो सकता है -
- Writing unsafe code - pointers in C
- Using Pointers in C#
- /unsafe (C# Compiler Options)
- Bitmap.LockBits Method (Rectangle, ImageLockMode, PixelFormat)
(ध्यान दें कि पहली वेबसाइट पर कहा गया है Pizelformat वास्तव में Pixelformat है) कुछ के लिए कुछ भ्रम पैदा करते हैं।
पिक्सेल शिकार को तेज करने के तरीके को लागू करने के बाद, गति में इतना वृद्धि नहीं हुई। तो मुझे लगता है कि मैं कुछ गलत कर रहा हूँ।
40 छवियों के लिए पुराना समय = 15.63।
40 छवियोंमैं महान लेख DocMax quoted साथ देखा के लिए
नई समय = 15.43, कि कोड "ताले" पिक्सल के एक सेट में। (या यह है कि मैं इसे कैसे समझता हूं) तो मैंने जो किया वह प्रत्येक पृष्ठ के पिक्सल की मध्य पंक्ति में लॉक है। क्या यह सही कदम होगा?
private int testPixels(String sourceDir)
{
//iterate through images
string[] fileEntries = Directory.GetFiles(sourceDir).Where(x => x.Contains("JPG")).ToArray();
var q = from string x in Directory.GetFiles(sourceDir)
where x.ToLower().EndsWith(".jpg")
select new FileInfo(x);
int holder = 1;
foreach (var z in q)
{
Bitmap mybm= Bitmap.FromFile(z.FullName) as Bitmap;
int blank = getPixelData2(mybm);
if (blank == 0)
{
holder = 0;
break;
}
}
return holder;
}
और फिर वर्ग
private unsafe int getPixelData2(Bitmap bm)
{
BitmapData bmd = bm.LockBits(new System.Drawing.Rectangle((bm.Width/2), 0, 1, bm.Height), System.Drawing.Imaging.ImageLockMode.ReadOnly, bm.PixelFormat);
int blue;
int green;
int red;
int width = bmd.Width/2;
for (int y = 0; y < bmd.Height; y++)
{
byte* row = (byte*)bmd.Scan0 + (y * bmd.Stride);
blue = row[width * 3];
green = row[width * 2];
red = row[width * 1];
// Console.WriteLine("Blue= " + blue + " Green= " + green + " Red= " + red);
//Check to see if there is some form of color
if ((blue != 255) || (green != 255) || (red != 255))
{
bm.Dispose();
return 1;
}
}
bm.Dispose();
return 0;
}
क्या आपने समय लगाया है कि कितना समय लगता है? यदि हां, तो समय क्या था और छवि की ऊंचाई क्या थी? – 3aw5TZetdf
आपको अपने कार्यान्वयन में कुछ गलत करना होगा, क्योंकि आपका एल्गोरिदम मुझे लगता है। एक कॉलम ऑफा बिटमैप को स्कैन करने में कोई समय नहीं लगना चाहिए। –
32 छवियों के लिए कुल समय = 00: 00: 12.9187389 ऊंचाई = 6552 चौड़ाई = 4580 – Ruan