BDS C++ biblioteki graficzne + jak obsłużyć PByteArray?


(Chris47) #1

Witam.

  1. Jakie biblioteki graficzne polecacie do BDS C++ 2006? Chcę, żeby aplikacja obsługiwała pliki JPEG, TIFF, RAV, GIF, itp.

  2. Jak po użyciu funkcji ScanLine można przypisać wynik do zmiennej typu PByteArray? Czym różni się PByteArray od TByteArray? Mam przykładowy kawałek kodu w Delphi:

linia : PByteArray;

linia := bitmapa.ScanLine_;_

Jak zrobić, aby to działało w C++?

Dzięki za pomoc


([alex]) #2

TColor *linia=(TColor*)bitmapa->ScanLine_;_

Biblioteka Jedi obsługuje większość z tych formatów, mimo że nie jest to biblioteka stricte graficzna, na temat RAV - nie wiem, nie sprawdzałem, możliwe że też obsługuje.


(Chris47) #3

A jak zrobić, żeby przypisać całą bitmapę do obiektu typu PByteArray? :?:

Bo np. nie zadziała

PByteArray liniaObrazu;


for (int i = 0; i < Image1->Picture->Bitmap->Height; i++)

{

   liniaObrazu+= (PByteArray)Image1->Picture->Bitmap->ScanLine[i];

}

([alex]) #4

PByteArray to normalny unsigned char *

vector<unsigned char *> V(Image1->Picture->Bitmap->Height);int i = 0; i  Image1-Picture-Bitmap-Height; i++)

(Chris47) #5

Problem w tym, że chcę, aby to była tablica jednowymiarowa. Chcę ją później posortować, a pomysł jest następujący:

Zdefiniowałem strukturę "kolor" oraz funkcję "porownajKolory(kolor a, kolor b) sortującą kolory (jeśli są równe zwraca "=", jeśli a > b zwraca 1, jeśli b > a zwraca -1)

PByteArray liniaObrazu = NULL;

vector wek;

  for (int i = 0; i < Image1->Picture->Bitmap->Height; i++)

  {

	liniaObrazu = (PByteArray)Image1->Picture->Bitmap->ScanLine[i];

	kolor temp;

	temp.R = (*liniaObrazu)[(i*3)+2];

	temp.G = (*liniaObrazu)[(i*3)+1];

	temp.B = (*liniaObrazu)[i*3];

	wek.push_back(temp);

  }

qsort(wek[0], wek.size(), sizeof(wek[0]), porownajKolory);

Co zrobić, aby funkcja sortująca zadziałała? :?:


([alex]) #6

Nie masz gwarancji że obraz będzie w trybie 24 bitowego koloru, chyba że specjalnie to ustawisz.

Bitmap->PixelFormat:=pf24Bit;

potem:

for (int y = 0; y < Image1->Picture->Bitmap->Height; ++y)

(Chris47) #7

No tak, samą procedurę przypisującą kolor do wektora mam, zabezpieczenie na bitmapy 24 bitowe jest. Problem polega na tym jak wszystko posortować :?:


([alex]) #8

Za pomocą algorytmu sort