Frage

Was ist die beste (am wenigsten Ressourcen schwer) Art und Weise ein Bild in und aus all 20 Sekunden mit einer Dauer von 1 Sekunde vor einem schwarzen Hintergrund (Bildschirmschoner), in C # zu verblassen?

(ein Bild über 350x130px).

Ich brauche dies für einen einfachen Bildschirmschoner, der auf einigen niedrigen Niveaus Rechner (XP).

laufen los

Im Moment bin ich mit dieser Methode gegen einen PictureBox, aber es ist zu langsam:

    private Image Lighter(Image imgLight, int level, int nRed, int nGreen, int nBlue)
    {
        Graphics graphics = Graphics.FromImage(imgLight);
        int conversion = (5 * (level - 50));
        Pen pLight = new Pen(Color.FromArgb(conversion, nRed,
                             nGreen, nBlue), imgLight.Width * 2);
        graphics.DrawLine(pLight, -1, -1, imgLight.Width, imgLight.Height);
        graphics.Save();
        graphics.Dispose();
        return imgLight;
    }
War es hilfreich?

Lösung

Sie könnten wahrscheinlich eine Farbmatrix wie in diesem Beispiel auf Msdn verwenden

http://msdn.microsoft.com /en-us/library/w177ax15%28VS.71%29.aspx

Andere Tipps

Statt einen Stift und die DrawLine () -Methode verwenden, können Sie Bitmap.LockBits direkt den Speicher Ihres Bildes zuzugreifen. Hier ist ein gute Erklärung rel="nofollow , wie es funktioniert.

Setzen Sie einen Timer auf dem Formular, und im Konstruktor oder die Form_Load, schreiben

    timr.Interval = //whatever interval you want it to fire at;
    timr.Tick += FadeInAndOut;
    timr.Start();

Fügen Sie eine private Methode

private void FadeInAndOut(object sender, EventArgs e)
{
    Opacity -= .01; 
    timr.Enabled = true;
    if (Opacity < .05) Opacity = 1.00;
}

Hier ist mein nehmen auf diese

    private void animateImageOpacity(PictureBox control)
    {
        for(float i = 0F; i< 1F; i+=.10F)
        {
            control.Image = ChangeOpacity(itemIcon[selected], i);
            Thread.Sleep(40);
        }
    }

    public static Bitmap ChangeOpacity(Image img, float opacityvalue)
    {
        Bitmap bmp = new Bitmap(img.Width, img.Height); // Determining Width and Height of Source Image
        Graphics graphics = Graphics.FromImage(bmp);
        ColorMatrix colormatrix = new ColorMatrix {Matrix33 = opacityvalue};
        ImageAttributes imgAttribute = new ImageAttributes();
        imgAttribute.SetColorMatrix(colormatrix, ColorMatrixFlag.Default, ColorAdjustType.Bitmap);
        graphics.DrawImage(img, new Rectangle(0, 0, bmp.Width, bmp.Height), 0, 0, img.Width, img.Height, GraphicsUnit.Pixel, imgAttribute);
        graphics.Dispose();   // Releasing all resource used by graphics 
        return bmp;
    }

Es ist auch ein anderer Thread zu erstellen empfohlen, da dies Ihre wichtigste einzufrieren.

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