Graphics e picturebox

di il
1 risposte

Graphics e picturebox

Non ho risolto l'altro problema e ne ho un altro: ho un bitmap , e uso graphics.drawImage per cambiare tramite una matrice di colori il valore alfa dell' immagine.Fin qui tutto bene, il problema è riportare l'immagine cambiata nella pictureBox.

PictureBox.Image=graphics.drawimage(immagine con nuovo alfa);

chiaramente non funziona visto che il metodo non ritorna un
immagine...avete qualche idea?



il c# è un linguaggio tagliente...

1 Risposte

  • Re: Graphics e picturebox

    Ho trovato la soluzione, se a qualcuno interessa ecco il codice

    Bitmap bitmap =new Bitmap(this.pictureBox1.Image,this.pictureBox1.Image.Width,this.pictureBox1.Image.Height) ;//creazione bitmap dall'immagine in picture box
    Graphics al=this.pictureBox1.CreateGraphics();//creo l'oggetto graphics collegato alla picturebox



    this.pictureBox1.Image=null;//per evitare di sovradisegnare
    this.pictureBox1.Refresh();
    // matrice per cambiare alfa.

    float [][] matrixItems ={
    new float[] {1, 0, 0, 0, 0},
    new float[] {0, 1, 0, 0, 0},
    new float[] {0, 0, 1, 0, 0},
    new float[] {0, 0, 0, 0.6f, 0},
    new float[] {0, 0, 0, 0, 1}};

    ColorMatrix colorMatrix = new ColorMatrix(matrixItems);

    // Create an ImageAttributes object and set its color matrix.
    ImageAttributes imageAtt = new ImageAttributes();
    imageAtt.SetColorMatrix(
    colorMatrix,
    ColorMatrixFlag.Default,
    ColorAdjustType.Bitmap);



    int iWidth = bitmap.Width;
    int iHeight = bitmap.Height;

    //disegno dell immagine cambiata
    al.DrawImage(
    bitmap,
    new Rectangle(0,0, iWidth, iHeight), // destination rectangle

    0.0f, // source rectangle x
    0.0f, // source rectangle y
    iWidth, // source rectangle width
    iHeight, // source rectangle height
    GraphicsUnit.Pixel,
    imageAtt);

    Graphics del=Graphics.FromImage(bitmap);//mi serve un altro oggetto graphics sulla nuova bitmap


    //ecco le righe utili per copiare la superficie della bitmap
    System.IntPtr srcDC=GetDC(this.pictureBox1.Handle);





    System.IntPtr bmDC=del.GetHdc();


    //la BitBlt va importata con dllimport
    BitBlt(bmDC,0,0,bitmap.Width,bitmap.Height,srcDC,0,0,0x00CC0020 /*SRCCOPY*/);



    ReleaseDC(this.pictureBox1.Handle, srcDC);

    del.ReleaseHdc(bmDC);


    this.pictureBox1.Image=bitmap;
    //this.getThumb(bitmap);
    //this.tot[count-1]=bitmap;
    this.pictureBox1.Refresh();

    il c# è un linguaggio tagliente...
Devi accedere o registrarti per scrivere nel forum
1 risposte