private unsafe Bitmap PobierzObraz(int x, int y, Bitmap b) { Wielkość = new Size(x, y); Bitmap zwracana = new Bitmap(x, y); BitmapData bd = zwracana.LockBits(new Rectangle(0, 0, x, y), ImageLockMode.WriteOnly, PixelFormat.Format24bppRgb); RGB * MiejsceZapisane = (RGB *)bd.Scan0; PointF MinimalnyXF = XNYN.NaPointF(); PointF MaksymalnyYF = XPYN.NaPointF(); PointF PrzesuniecieLewe = XNYP.Odejmij(XNYN).NaPointF().Dziel(y); PointF PrzesunieciePrawe = XPYP.Odejmij(XPYN).NaPointF().Dziel(y); for (int i = 0; i < y; i++) { PointF PunktPoStronieLewej = MinimalnyXF.Dodaj(PrzesuniecieLewe.Razy(i)); PointF PunktPoStroniePrawej = MaksymalnyYF.Dodaj(PrzesunieciePrawe.Razy(i)); PointF PrzesuniecieMiedzyStronami = PunktPoStroniePrawej.Odejmij(PunktPoStronieLewej).Dziel(x); for (int j = 0; j < x; j++, MiejsceZapisane++) { PointF p = PunktPoStronieLewej.Dodaj(PrzesuniecieMiedzyStronami.Razy(j)); * MiejsceZapisane = b.Weź(p).NaRgb(); } } zwracana.UnlockBits(bd); return(zwracana); }
public Bitmap WeźFragmntObrazu(Bitmap b) { //Bitmap Zw = b.Clone(new Rectangle(Początek.X, Początek.Y, Koniec.X - Początek.X, Koniec.Y - Początek.Y), PixelFormat.Format24bppRgb); float Proporcje = (XNYN.Odległość(XPYN) + XPYP.Odległość(XNYP)) / (XNYN.Odległość(XNYP) + XPYP.Odległość(XPYN)); //return PobierzObraz(Convert.ToInt32(IlośćPikseliSQRT * (1 / Proporcje)) &~3, Convert.ToInt32(IlośćPikseliSQRT * Proporcje), b); return(PobierzObraz(Convert.ToInt32(IlośćPikseliSQRT) & ~3, Convert.ToInt32(IlośćPikseliSQRT) & ~3, b)); }
public unsafe byte *WeźFragmntObrazuB(Bitmap b) { float LewyY = XNYP.Odległość(XNYN); float PrawyY = XPYP.Odległość(XPYN); float Y = LewyY + PrawyY; float LewyX = XNYN.Odległość(XPYN); float PrawyX = XNYP.Odległość(XPYP); float X = LewyX + PrawyX; float Proporcje = Y / X; //return PobierzObraz(Convert.ToInt32(IlośćPikseliSQRT * (1 / Proporcje)) &~3, Convert.ToInt32(IlośćPikseliSQRT * Proporcje), b); return(PobierzObrazByte(Convert.ToInt32(IlośćPikseliSQRT) & ~3, Convert.ToInt32(Proporcje * IlośćPikseliSQRT) & ~3, b)); }
private unsafe byte *PobierzObrazByte(int x, int y, Bitmap b) { //416 784 Wielkość = new Size(x, y); byte * zw = (byte *)System.Runtime.InteropServices.Marshal.AllocHGlobal(x * y); byte * zwk = zw; BitmapData bd = b.LockBits(new Rectangle(Point.Empty, b.Size), ImageLockMode.ReadWrite, PixelFormat.Format24bppRgb); byte * początek = (byte *)bd.Scan0; int str = bd.Stride; PointF MinimalnyXF = XNYN.NaPointF(); PointF MaksymalnyYF = XPYN.NaPointF(); PointF PrzesuniecieLewe = XNYP.Odejmij(XNYN).NaPointF().Dziel(y); PointF PrzesunieciePrawe = XPYP.Odejmij(XPYN).NaPointF().Dziel(y); for (int i = 0; i < y; i++) { PointF PunktPoStronieLewej = MinimalnyXF.Dodaj(PrzesuniecieLewe.Razy(i)); PointF PunktPoStroniePrawej = MaksymalnyYF.Dodaj(PrzesunieciePrawe.Razy(i)); PointF PrzesuniecieMiedzyStronami = PunktPoStroniePrawej.Odejmij(PunktPoStronieLewej).Dziel(x); float Px = PunktPoStronieLewej.X, Py = PunktPoStronieLewej.Y; float PrzesuniecieX = PrzesuniecieMiedzyStronami.X, PrzesuniecieY = PrzesuniecieMiedzyStronami.Y; for (int j = 0; j < x; j++, zw++) { int X = (int)(PrzesuniecieX * j + Px); int Y = (int)(Py + j * PrzesuniecieY); if (X < 0 || Y < 0 || X >= b.Width || Y >= b.Height) { *zw = 0; continue; } byte *tmp = początek + str * Y + X * 3; RGB * r = (RGB *)tmp; int s = r->B + r->G + r->R; s /= 3; *zw = (byte)s; } } b.UnlockBits(bd); return(zwk); }