URKA è vero! Quella riga
byte[] a = GetAll(path);
mi frega di brutto. E io sai che faccio? Butto tutto il codice di GetBmp dentro GetAll e gli faccio caricare di volta in volta solo il byte puntato.... (torno subito)
codice:
//Preleva una porzione da una bitmap su disco in base ai dati di origine x0,y0
//e le dimensioni dimx,dimy e restituisce una bitmap in memoria.
public static Bitmap GetBmp(string path, int x0, int y0, int dimx, int dimy)
{
Vector4 Data = GetData(path);
int Dim1 = (int)Data.X;
int Dim2 = (int)Data.Y;
int Bits = (int)Data.Z;
int Ofs = (int)Data.W;
int truewidth = (int)((Bits * Dim1 + 31) / 32) * 4;
Bitmap b2 = new Bitmap(dimx, dimy);
FileStream f = File.Open(path, FileMode.OpenOrCreate);
byte[] a = new byte[3];//i tre byte di colore pixel
int Ptr = 0, R, G, B;
for (int y = y0; y < y0 + dimy; y++)
for (int x = x0; x < x0 + dimx; x++)
{
Ptr = Ofs + (Bits / 8) * x + truewidth * (Dim2 - y - 1);
f.Seek(Ptr, SeekOrigin.Begin);
f.Read(a, 0, 3);
B = Convert.ToInt32(a[0]);
G = Convert.ToInt32(a[1]);
R = Convert.ToInt32(a[2]);
b2.SetPixel(x - x0, y - y0, System.Drawing.Color.FromArgb(R, G, B));
}
f.Close();
return b2;
}