Laden...

Transperent zeichnen auf eine WriteableBitmap(?)

Erstellt von Coooder vor 11 Jahren Letzter Beitrag vor 11 Jahren 1.398 Views
C
Coooder Themenstarter:in
180 Beiträge seit 2011
vor 11 Jahren
Transperent zeichnen auf eine WriteableBitmap(?)

hallo leute,

ich habe eine WriteableBitmap auf der ich auch schon zeichnen kann ... aber nur mit so vollton farben die alles komplett übermalen ... nun will ich aber auch eine gewisse transperenz haben so das man dass was unter dem gemalten is noch sehen kann (im prinzip so wie ein textmarker)

hier mal der code wie ich momentan auf meine bitmap malen kann:

private void screenshotImg_MouseMove(object sender, MouseEventArgs e)
        {
            if (e.LeftButton == MouseButtonState.Pressed && crossOutRadio.IsChecked == true)
            {
                int mx = Convert.ToInt32(Mouse.GetPosition(screenshotImg).X);
                int my = Convert.ToInt32(Mouse.GetPosition(screenshotImg).Y - 10);
                int x;
                int y;

                wBmp = new WriteableBitmap(screenshotImg.Source as BitmapSource);

                    for (int i = 0; i < 10; i++)
                    for (int ii = 0; ii < 20; ii++)
                    {
                        byte[] ColorData = { 0, 0, 255, 0}; // B G R
                        x = mx + i;
                        y = my + ii;
                        if (x > 0 && y > 0 && x < screenshotImg.Width && y < screenshotImg.Height)
                        {
                            Int32Rect rect = new Int32Rect(x, y, 1, 1);
                            wBmp.WritePixels(rect, ColorData, 4, 0);
                        }
                    }
                screenshotImg.Source = wBmp;
            }
        }

in dem fall wird einfach knall rot drüber gemalt ....
nun könnte man natürlich denken das der 4te wert im ColorData byte-array für die tranzperens gut is .... aber der schein lediglich irgentwie nur ne atrappe zu sein ^^ es scheint völlig egal zu sein was für ein wert man da eingibt, es ist kein unterschied zu sehen ...

weis einer vieleicht rat? 😃

5.658 Beiträge seit 2006
vor 11 Jahren

Hi Cooder,

es ist dir hoffentlich klar, daß der Alpha-Wert eines Bitmaps für die Gesamt-Transparenz zuständig ist, und nicht dafür, einen anderen Wert darüberzuzeichnen. Wenn du also zwei Bitmaps hättest, und die übereinanderzeichnen würdest, dann bräuchtest du in der zweiten Bitmap nur die Stellen zu markieren, die durchsichtig bleiben sollen.

Du möchtest aber zwei unterschiedliche Farbwerte in einer Bitmap miteinander kombinieren. Diese Berechnung mußt du schon selbst durchführen. Für den "Textmarker-Effekt" reicht eine einfache Multiplikation meist aus.

Christian

Weeks of programming can save you hours of planning

C
Coooder Themenstarter:in
180 Beiträge seit 2011
vor 11 Jahren

jo danke, das hat mich nen schritt weiter gebracht ... also ich im prinzip hab ich jetzt diesen Textmarker effekt!
2 sachen nur:1. je nach hintergrund des Bildes kommt dann logischerweise eine andere farbe, die dann unter umständen überhaupt nich nach der eingestellten farbe aussieht 2. schaff ich es nicht die richtigen werte für die farben einzustellen ^^

wenn ich

ColorData[0] += 50

mache bekomme ich schonmal gelb hin! obwohl ColorData[0] ja eigentlich für den blauen farbton steht ... wieso wird das gelb?

5.658 Beiträge seit 2006
vor 11 Jahren

Hi Coooder,

wie sich die Farben zusammensetzen, kannst du hier nachlesen: RGB-Farbraum. Wenn du mit einem (echten) gelben Textmarker eine blaue oder rote Grafik markierst, entsteht übrigens auch keine gelbe Markierung, sondern irgendeine Mischfarbe.

Versuch doch erstmal deinen Effekt mit dem PhotoShop hinzubekommen (Stichwort Ebenen-Überblendung), und dann implementierst du die Berechnung in C#.

Christian

Weeks of programming can save you hours of planning

C
Coooder Themenstarter:in
180 Beiträge seit 2011
vor 11 Jahren

ok cool, der erste link is super, ... diese abbildung mit den Farbwürfeln sind toll!
Ich hab nun meine Farben alle schön hinbekommen (gelb, grün, rot) ... allerdings scheint gelb das einzig brauchbare zu sein ... bei rot wird zumbeispiel schwarze schrift in lächerlich bunten farben dann dargstellt ^^
grün geht grad noch so ... gelb hingegen is jedoch super

5.658 Beiträge seit 2006
vor 11 Jahren

bei rot wird zumbeispiel schwarze schrift in lächerlich bunten farben dann dargstellt

Dann machst du definitiv etwas verkehrt. Um solche Probleme zu vermeiden, hatte ich übrigens Multiplikation als Überblendungsmodus vorgeschlagen.

Weeks of programming can save you hours of planning

C
Coooder Themenstarter:in
180 Beiträge seit 2011
vor 11 Jahren

ja du hast recht!
ok cool, es funzt nun wie es soll, vielen dank!