Frage

Im Versuch, einen kleinen Platz 32 von 32 Pixeln mit einer 10 um 10 squareish transparenten Lücke in der Mitte zu erzeugen.

Das ist, was ich habe, so weit:

private Image CreatePicture(){
    // Create a new Bitmap object, 32 x 32 pixels in size
    Bitmap canvas = new Bitmap(32,32,System.Drawing.Imaging.PixelFormat.Format16bppRgb555);
    for(int i=10;i<21;i++){
        for(int p=10;p<21;p++){
            canvas.SetPixel(i,p,Color.Lime);
        }
    }
    canvas.MakeTransparent(Color.Lime);
    // return the picture
    return canvas;
}

Es ist ein es rau und nicht die letzte „optimierte Version“ es ist nur eine grobe Demo-Skript sein würde. Das Problem ist die zurückgegebene Bildtransparenz nicht statt dem nur ein graues Feld. (

Jede Hilfe sehr geschätzt.

Michael

UPDATE: Ich habe das Skript mit dem zu einem Alpha-RGB-Format eingestellt Pixelformat aktualisiert, die es akzeptiert tatsächlich ohne erroring zur Laufzeit. Nun aber wenn ich entfernen Sie die „canvas.MakeTransparent (Color.Lime);“ es zeigt nur ein graues Feld die gleiche Farbe wie der grauen Hintergrund Linie zeigt es eine Kalk-Box mit ihm in der Mitte; so scheint es, als ob die Transparenz wird erkannt wird nicht nur die Transparenz implimenting!

private Bitmap CreatePicture(){
    // Create a new Bitmap object, 50 x 50 pixels in size
    Bitmap canvas = new Bitmap(82,82,System.Drawing.Imaging.PixelFormat.Format32bppArgb);

    for(int i=10;i<71;i++){
        for(int p=10;p<71;p++){
            canvas.SetPixel(i,p,Color.Lime);
        }
    }
    canvas.MakeTransparent(Color.Lime);
    // return the picture
    return canvas;
}
War es hilfreich?

Lösung

Es hängt davon ab, wie Sie gehen zu verwenden oder das Bild angezeigt werden soll. PNG und GIF sind die beiden Dateiformate, die Transparenz unterstützen.

Für die Bitmap Einstellung der Transparenz, i verwendet:

Graphics.FromImage (Bitmap) .FillRectangle (Brushes.Transparent, ...) auf den Bereich stelle ich als transparent wollte, dann gespeichert ich die Datei als PNG aus ein Bild mit Transparenz zu erhalten.

Ich habe auch versucht die MakeTransparent Methode und lief in Probleme und die Brushes.Transparent war die Lösung, die für meine Situation gearbeitet.

Hope dies gibt Ihnen eine Richtung zu schauen.

Eine letzte Anmerkung, ich schaffe das Bitmap-Objekt mit der Breite und Höhe nur, ich gebe nicht das Pixelformat oder was auch immer das heißt das heißt Bitmap = Neue Bitmap (Breite, Höhe);

Andere Tipps

[...]Format16bppRgb555

Versuchen Sie, einige Formate mit einem Alphakanal (... RGBA) hier zu verwenden. Auch wenn der Ausgang später wird ein Bild sein, stellen Sie sicher, dass Sie ein Bildformat wie PNG verwenden, die Alpha-Kanäle unterstützt.

Sie müssen wahrscheinlich das Bildformat Format16bppArgb1555 ändern.

Im Moment Sie verwenden Format32bppArgb oder Format16bppRgb555, die ohne Alpha-Informationen 16 Bit pro Pixel ist. Transparenz erfordert einen Alphakanal oder alpha-Bit vorhanden sein.

Meine du nicht nur SetPixel() Farbe .Transparent ? Statt Color.Lime dann MakeTransparent? Und wie andere haben festgestellt; Sie benötigen ein Pixelformat mit einem Alphakanal.

Die MakeTransparent Funktion funktioniert. Sie haben „grauen Flecken“, weil Ihre TransparencyKey nicht korrekt ist. Sie werden feststellen, dass, wenn Sie Ihre TransparencyKey Eigenschaft zu setzen, was Farbe, die graue Fleck ist, die grauen Flecke in der Tat transparent werden, wenn Ihr Bild angezeigt wird. Das Standardgraufeld bekam ich wurde als „Control“ in der Farbe markiert, oder im Grunde Hintergrundfarbe der Standard-Windows-Formulars. Ändern Sie Ihre TransparencyKey, was auch immer Ihre grauen Fleck ist (in meinem Fall Control) und das Problem gelöst werden, kein Speichern von Dateien auf die Festplatte notwendig. Prost Kumpel.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top