मैं वास्तविक छवि (फसल) छोड़कर, एक छवि से सभी सफेद या पारदर्शी पिक्सल को हटाने की कोशिश कर रहा हूं। मैंने कुछ समाधानों की कोशिश की है, लेकिन कोई भी काम नहीं कर रहा है। कोई सुझाव या क्या मैं रात्रि लेखन छवि फसल कोड खर्च करने जा रहा हूं?सी # - फसल पारदर्शी/सफेद स्थान
उत्तर
public Bitmap CropBitmap(Bitmap original)
{
// determine new left
int newLeft = -1;
for (int x = 0; x < original.Width; x++)
{
for (int y = 0; y < original.Height; y++)
{
Color color = original.GetPixel(x, y);
if ((color.R != 255) || (color.G != 255) || (color.B != 255) ||
(color.A != 0))
{
// this pixel is either not white or not fully transparent
newLeft = x;
break;
}
}
if (newLeft != -1)
{
break;
}
// repeat logic for new right, top and bottom
}
Bitmap ret = new Bitmap(newRight - newLeft, newTop - newBottom);
using (Graphics g = Graphics.FromImage(ret)
{
// copy from the original onto the new, using the new coordinates as
// source coordinates for the original
g.DrawImage(...);
}
return ret
}
ध्यान दें कि यह कार्य गंदगी के रूप में धीमा हो जाएगा। GetPixel()
अविश्वसनीय रूप से धीमा है, और Width
और Height
को एक लूप के अंदर Bitmap
के गुणों को भी धीमा कर रहा है। LockBits
ऐसा करने का सही तरीका होगा - यहां स्टैक ओवरफ्लो पर कई उदाहरण हैं।
धन्यवाद, मुझे वहां आधा रास्ता मिला। एकमात्र समस्या यह है कि, यदि मैं निर्दिष्ट आकार से बड़ा हूं तो भी मैं छवि का आकार बदलना चाहता हूं। टिप्पणी बॉक्स में फिट होने की तुलना में अधिक कोड है, लेकिन मूल छवि केवल अंतिम छवि के बारे में आधा लेती है। कोड http://pastebin.com/He3S8aCH – Echilon
पर है, मैंने दो चर ट्रांसफर किए हैं: पी। समस्या ठीक हो गई है, जल्द ही एक ब्लॉग पोस्ट की उम्मीद है (यहां से लिंक होगा)। – Echilon
मुझे लगता है कि मैं भी खराब हो गया। बिट्स जो 'रंग। आर! = 0' आदि कहती हैं, वास्तव में' रंग। आर! = 255' कहनी चाहिए, क्योंकि एक सफेद पिक्सेल में प्रत्येक के लिए 255 के आर, जी और बी मान होंगे (0 जीबी का आरजीबी, 0 काला है)। यदि मूल संस्करण आपके लिए काम करता है, तो शायद यह केवल पारदर्शी (और काला) पिक्सल फसल हो गया है। – MusiGenesis
डब्ल्यूपीएफ में हमारे पास एक लिखित योग्य बिट क्लास है। क्या आप यह खोज रहे हैं? यदि यह मामला है तो कृपया http://blogs.msdn.com/b/jgalasyn/archive/2008/04/17/using-writeablebitmap-to-display-a-procedural-texture.aspx
प्रति-पिक्सेल जांच को चाल करना चाहिए। शीर्ष & नीचे से खाली रेखा खोजने के लिए प्रत्येक पंक्ति को स्कैन करें, बाएं & दाएं बाधाओं को खोजने के लिए प्रत्येक पंक्ति को स्कैन करें (यह पंक्तियों या स्तंभों के साथ एक पास में किया जा सकता है)। जब बाधा पाई जाती है - छवि के हिस्से को दूसरे बफर में कॉपी करें।
तो, आप जो करना चाहते हैं वह शीर्ष, बाएं सबसे अधिक सफेद/पारदर्शी पिक्सेल और नीचे, सबसे अधिक गैर सफेद/पारदर्शी पिक्सेल है। ये दो निर्देशांक आपको एक आयताकार देंगे जो आप निकालने के बाद कर सकते हैं।
// Load the bitmap
Bitmap originalBitmap = Bitmap.FromFile("d:\\temp\\test.bmp") as Bitmap;
// Find the min/max non-white/transparent pixels
Point min = new Point(int.MaxValue, int.MaxValue);
Point max = new Point(int.MinValue, int.MinValue);
for (int x = 0; x < originalBitmap.Width; ++x)
{
for (int y = 0; y < originalBitmap.Height; ++y)
{
Color pixelColor = originalBitmap.GetPixel(x, y);
if (!(pixelColor.R == 255 && pixelColor.G == 255 && pixelColor.B == 255)
|| pixelColor.A < 255)
{
if (x < min.X) min.X = x;
if (y < min.Y) min.Y = y;
if (x > max.X) max.X = x;
if (y > max.Y) max.Y = y;
}
}
}
// Create a new bitmap from the crop rectangle
Rectangle cropRectangle = new Rectangle(min.X, min.Y, max.X - min.X, max.Y - min.Y);
Bitmap newBitmap = new Bitmap(cropRectangle.Width, cropRectangle.Height);
using (Graphics g = Graphics.FromImage(newBitmap))
{
g.DrawImage(originalBitmap, 0, 0, cropRectangle, GraphicsUnit.Pixel);
}
महान समाधान! मैंने '|| हटा दिया pixelColor.A <255' इसे काम करने के लिए। – krlzlx
मुझे लगभग 10 मिनट में कुछ हज़ार .jpg फ़ाइलों को ट्रिम करने के लिए एक विधि मिली, लेकिन मैंने कोड में ऐसा नहीं किया। मैंने स्नैग-इट संपादक की कनवर्ट फीचर का इस्तेमाल किया। मुझे नहीं पता कि यह आपके लिए एक विकल्प है, अगर आपको एक बार या आपकी आवश्यकता चल रही है, तो सॉफ़्टवेयर की कीमत के लिए, जो कि बहुत कुछ नहीं है, मैंने इसे एक सभ्य कामकाज माना। (मैं के लिए काम नहीं है या Techsmith प्रतिनिधित्व करते हैं।)
जॉय
- 1. साथ सी # BitmapData से एक क्षेत्र फसल
- 2. AVLayerVideoGravityResizeAspectFill फसल
- 3. छवि फसल
- 4. UIImagePickerController फसल फ्रेम
- 5. वेबमैज फसल स्क्वायर
- 6. फसल यूआई बटन बटन
- 7. PHP जीडी - फसल आकार
- 8. एंड्रॉइड फसल निर्देशांक
- 9. किनेक्ट फसल छवि
- 10. स्थान एपीआई (सी #)
- 11. सी ++ नाम स्थान सवाल
- 12. सी # एनम्स में स्थान
- 13. सी # - चेहरे और फसल छवि का पता लगाएं
- 14. PHP फसल छवि आयाम अनुपात
- 15. फसल छवि एला Google गोगल्स
- 16. आईफोन UIbezierpath अनियमित छवि फसल
- 17. रीसाइज़िंग/फसल और 4 छवियों
- 18. फसल कीटनाशक एलजीएचटी 02231 त्रुटि
- 19. बेस्ट पीएचपी छवि फसल कक्षा
- 20. एंड्रॉइड वॉलपेपर प्रबंधक फसल छवि
- 21. सफेद स्थान छोड़ें और सी
- 22. सी # - टैब और रिक्त स्थान
- 23. सी मानक पुस्तकालय का स्थान
- 24. सर्वश्रेष्ठ आकार बदलें या फसल तर्क
- 25. एक फसल उपकरण का उपयोग कर छवि फसल के लिए Django ऐप
- 26. फसल फसल 'अनुरोध संदर्भ के बाहर काम कर रहा है' उप थ्रेड
- 27. आईओएस - स्केल और फसल CMSampleBufferRef/CVImageBufferRef
- 28. जनहित याचिका फसल/के रंग भरें thumbnailing
- 29. सीएसएस पृष्ठभूमि छवि आकार चौड़ाई फसल ऊंचाई
- 30. चेहरे का पता लगाने और फसल
तो वहाँ अन्य लोग हैं, जो लगातार बार बार कोड की एक ही पंक्ति लिख का सपना हैं? मैंने सोचा कि मैं अकेला था :-) –
यदि आप कम से कम एक दृष्टिकोण का विवरण देते हैं और समझाया कि यह कैसे काम नहीं करता है तो यह समुदाय की मदद करेगा। –