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...