Witam. Zamieniam kod napisany w C++/CLI na C# i jak w temacie mam problem ze wskaznikami. Ogolnie chodzi o to ze blokuje bitmapa w pamieci za pomoca LockBits i cos tam szukam lub porownuje i to udalo mi sie ogarnac. Natomiast nie moge sobie poradzic z utworzeniem tablicy na wskazniku i przepisaniem do niej co mi tam potrzebne z tego bitmapa.
Dzialajacy kod w C++/CLI:
```/////////////////// kopiujemy screenshot i tworzymy kopie BW /////////////////////////
array<Byte>^ tab_ob = gcnew array<Byte>(1920 * 1080);
pin_ptr<Byte> p1 = &tab_ob[0];
byte* p2 = p1;
///////////////////////////////////////////// BW + tablica //////////
int od_wielkosci_koloru = 80;
byte kolor_czarny = 0;
for (int y = 0; y < 1080; y++)
{
byte* bits = scan0 + y * stride;
for (int x = 0; x < 1920; x++)
{
byte kolor = Convert::ToByte((*(bits + 0) + *(bits + 1) + *(bits + 2)) / 3);
if (kolor > od_wielkosci_koloru)
{
(*p2) = kolor;
*(bits + 3) = kolor;
}
else
{
(*p2) = kolor_czarny;
*(bits + 3) = kolor_czarny;
}
p2++; // to jest kolejna komorka
bits += 4;
}
}
A to niedzialajacy (jeden z wielu jakie probowalem) na C# :
/////////////////// kopiujemy screenshot i tworzymy kopie BW /////////////////////////
unsafe
{
fixed (byte* p1 = new byte[1920 * 1080])
{
byte p2 = p1;
///////////////////////////////////////////// BW + tablica //////////
int od_wielkosci_koloru = 80;
byte kolor_czarny = 0;
for (int y = 0; y < 1080; y++)
{
byte* bits = scan0 + y * stride;
for (int x = 0; x < 1920; x++)
{
byte kolor = Convert.ToByte((*(bits + 0) + *(bits + 1) + *(bits + 2)) / 3);
if (kolor > od_wielkosci_koloru)
{
(*p1) = kolor;
*(bits + 3) = kolor;
}
else
{
(*p1) = kolor_czarny;
*(bits + 3) = kolor_czarny;
}
p1++; // to jest kolejna komorka
bits += 4;
}
}
}
Nie mam pojecia jak to ugryzc...