मैं सी # प्रबंधित जीडीआई + लाइब्रेरी से सी # बिटमैप के किनारे व्हाइटसाइट का पता लगाने के लिए एक समाधान की तलाश में हूं।सी # जीडीआई एज व्हाइटस्पेस डिटेक्शन एल्गोरिदम
छवियों या तो पारदर्शी या सफेद, 400x चित्रों का सबसे किनारों के आसपास 2000px के बारे में सफेद स्थान के साथ 8000x8000px हैं होगा।
किनारों को खोजने का सबसे प्रभावी तरीका क्या होगा, x, y, ऊंचाई और चौड़ाई निर्देशांक? मैंने पिक्सेल द्वारा पिक्सेल जाने की कोशिश की लेकिन इसे बहुत धीमा लग रहा था।
समाधान के लिए अद्यतन --Added बाईं/सही/ऊपर/नीचे सीमा
छवियों विस्तार केंद्र छवियों के साथ कोई समस्या है, अब किसी भी पारदर्शी (0%) सफेद (#FFFFFF) पिक्सल फसलों या।
var top = bitmap.Height;
var left = bitmap.Width;
var right = 0;
var bottom = 0;
...
var pData = pData0 + (y * data.Stride) + (x * 4);
var xyAlpha = pData[3];
var xyBlue = pData[0];
var xyGreen = pData[1];
var xyRed = pData[2];
if ((xyAlpha > 0) || (xyRed != 255 && xyGreen != 255 && xyBlue != 255)) {
if (y < top)
top = y;
if (y > bottom)
bottom = y;
if (x < left)
left = x;
if (x > right)
right = x;
}
...
var cropWidth = right - left;
var cropHeight = bottom - top;
var cropX = top;
var cropY = left;
var cacheBitmap = new Bitmap(cropWidth, cropHeight, PixelFormat.Format32bppArgb);
using (var cacheGraphics = Graphics.FromImage(cacheBitmap)) {
cacheGraphics.DrawImage(context.Image, new Rectangle(0, 0, cropWidth, cropHeight), cropX, cropY, cropWidth, cropHeight, GraphicsUnit.Pixel);
}