अवलोकनपारदर्शिता और अस्पष्टता के साथ कैनवास पर पेंट कैसे करें?
GR32 लाइब्रेरी से, मैं एक ग्रिड जो इतनी तरह मेरे पारदर्शी पृष्ठभूमि हो जाएगा प्रस्तुत करना TImgView32 उपयोग कर रहा हूँ:
TImgView32 मैं एक नियमित TImage है अंदर रखा, जहाँ मैं कैनवास पर ड्राइंग किया जाएगा, कुछ इस तरह:
कार्य
मैं जो हासिल करना चाहता हूं वह ब्रश की अस्पष्टता सेट करने की क्षमता है, जिससे मेरे प्रोग्राम में छवि संपादन के लिए और संभावनाएं मिलती हैं। एक फ्लैट रंग तैयार करने के बजाय, ब्रश की अस्पष्टता सेट करने से रंग गहराई आदि के विभिन्न स्तरों की अनुमति मिलती है।
मुझे इस प्रश्न को पहले खोजते समय मिला: Draw opacity ellipse in Delphi 2010 - एंड्रियास रेजब्रांड ने इसके जवाब में कुछ उदाहरण दिए हैं सवाल।
मैंने देखा है कि एंड्रियास ने क्या किया, और अपने स्वयं के सरलीकृत प्रयास के साथ आया लेकिन मैं एक समस्या से फंस गया हूं। इन अगले दो छवियों पर एक नजर डालें, पहली समस्या अधिक दिखाने के लिए पारदर्शी पृष्ठभूमि और एक काले रंग की पृष्ठभूमि के साथ दूसरे के साथ है स्पष्ट:
आप ब्रश के आसपास, देख सकते हैं (सर्कल) एक बहुत ही कष्टप्रद वर्ग है जिसे मैं छुटकारा नहीं पा सकता हूं। जो दिखाना चाहिए वह ब्रश है।
procedure DrawOpacityBrush(ACanvasBitmap: TBitmap; X, Y: Integer;
AColor: TColor; ASize: Integer; Opacity: Integer);
var
Bmp: TBitmap;
begin
Bmp := TBitmap.Create;
try
Bmp.SetSize(ASize, ASize);
Bmp.Transparent := False;
with Bmp.Canvas do
begin
Pen.Color := AColor;
Pen.Style := psSolid;
Pen.Width := ASize;
MoveTo(ASize div 2, ASize div 2);
LineTo(ASize div 2, ASize div 2);
end;
ACanvasBitmap.Canvas.Draw(X, Y, Bmp, Opacity);
finally
Bmp.Free;
end;
end;
procedure TForm1.Image1MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
DrawOpacityBrush(Image1.Picture.Bitmap, X, Y, clRed, 50, 85);
end;
जो एक नियमित रूप से बिटमैप पर इस का उत्पादन: यह मेरी उन परिणामों का उत्पादन किया जाता है कोड
विचार मैं (अस्पष्टता के साथ एक अंडाकार बनाने के एंड्रियास रास्ता के आधार पर) था कैनवास पर एक विशिष्ट ब्रश प्रस्तुत करना था, इसे ऑफस्क्रीन बिटमैप पर असाइन करें, फिर इसे अस्पष्टता के साथ मुख्य बिटमैप पर दोबारा हटा दें। किनारे के चारों ओर कष्टप्रद वर्ग को छोड़कर, कौन सा काम करता है।
स्क्रीनशॉट में दिखाए गए अस्पष्टता वाले ब्रश को मैं कैसे प्रस्तुत कर सकता हूं, लेकिन ब्रश सर्कल के चारों ओर उस वर्ग के बिना?
यदि मैं Bmp.Transparent := True
सेट करता हूं तो अभी भी एक सफेद बॉक्स है, लेकिन अब कोई अस्पष्टता नहीं है। बस एक ठोस सफेद वर्ग और ठोस भरा लाल सर्कल।
ग्रेट उत्तर धन्यवाद रेमी।मुझे पता था कि मेरे बिटमैप्स पीएफ 24 बिट थे, लेकिन इसे पीएफ 32 बिट पर सेट करने या नहीं समझने के बारे में पता था। मैं शायद अपनी पृष्ठभूमि को गलत तरीके से मिटा रहा हूं, क्योंकि मैं फिक्स्डेंसी रंग को निश्चित रूप से सेट कर रहा हूं और जब मैं मिटा देता हूं तो clbtnFace के मान को सेट कर रहा हूं। –
आप इस वर्ग को भी उपयोगी पाते हैं: http://code.google.com/p/transparent-canvas/। यह 32-बिट, प्रति-पिक्सेल-अल्फा ड्राइंग के आसपास एक रैपर है जो टीसीएनवास के समान इंटरफ़ेस के साथ है। एक बनाएं, इसे आकर्षित करें, फिर इसे कैनवास पर खींचा जाए। एमपीएल लाइसेंस प्राप्त है ताकि आप इसे कहीं भी इस्तेमाल कर सकें। –