Wczytywanie obrazów

0

Witam
Mam pytanko, nie wiem jak wykonać wczytywanie do komponentu Image1 obrazka z pliku. Nie chodzi mi o funkcję LoadFromFile. Np. mamy plik obraz.jpg i teraz go wczytujemy do Image1 (i tu nie wiem jak to wykonać żeby wczytywać obraz kawałkami, danych z pliku) a nie Od razu całość jak to robie za pomocą LoadFromFile. Jeśli mnie ktoś zrozumiał i wie jak to wykonać to byłbym bardzo wdzięczny za podpowiedź.

0

Musisz znać specyfikę formatu jpeg! A wież mi nie jest taka banalna. Z BMP byłoby dużo prościej

0

Jest taka funkcja LoadFromStream służaca do odczytywanie obrazów z zasobów. Ale nie wiem czy moge ją wykorzystac do swoich celów, bo ja robie tak otwieram plik (jakiś z obrazem) troche go przerabiam i potem chce go wyświetlić w Image. Można by to zrobić tak że przerobić plik z obrazem zapisać i potem przez LoadFromFile otworzyć w Image, a chodzi mi o ominącie tych procedur. Jest coś takiego ???.

0

nie za bardzo rozumiem o co ci chodzi, ale czy chodzi ci o modyfikaję jpg, bez uprzedniej konwersji go do bmp?

0

Chodzi ci pewnie o wczytanie JPG, z tym, że nie znajduje się on w pliku tylko w pamięci.
LoadFromStream jest tym co potrzebujesz. Służy on do wczytywania ze strumienia.

  1. Tworzysz strumień pamięciowy - obiekt typu TMemoryStrem:
TMemoryStrem *stream = new TMemoryStrem();
  1. Wczytujesz zawartość pliku do strumienia:
stream->LoadFromFile("nazwa_pliku.jpg");
  1. Przerabiasz zawartość wedle uznania odwołując się do niej przez stream->Memory np. odkodowanie zxorowanych bajtów pliku:
char* zawartosc = (char*) stream->Memory;
for(int i = 0; i < stream->Size; i++) zawartosc[i] ^= klucz;
  1. Wczytujesz przerobiony JPG do imaga:
Image1->Picture->LoadFromStream(stream);
  1. Sprzątanie:
delete stream;
0

adf88 dzięki za rade, to jest to o co mi chodzi, już wszystko działa.

// a skleiłem ci posty i podsumowałem, nie obrazisz się? ;) - R

Mam problemik wczytuje plik do stream, chce go potem wrzucić do Image i wyskakuje mi błąd JPEG error #41, o co mu chodzi. Poniżej wstawiam kod:

  stream->Clear();
  stream->Write(zawartosc,filelength);

  TJPEGImage *jpg = new TJPEGImage();
  jpg->LoadFromStream(stream);
  Image1->Picture->Assign(jpg);        

Jesli ktos ma pomysl jak temu zaradzic to z gorz wilekie dzieki za podpowiedz.

0

po operacji Write musisz ustawic 'wskaźnik bieżącej pozycji' w strumieniu na początek. Tak przynajmniej kojarzy mi się.

stream->Clear();
stream->Write(zawartosc,filelength);

stream->Position = 0;
//albo
stream->Seek(0,soFromBeginning);
0

Witam,
Jestem zupełnie zielony jeżeli chodzi o c++, chciałem Was poprosić o pomoc...czy w c++ istnieje podobnie jak w matlabie możliwość wczytania obrazu jpg do postaci macierzy i dalsze przeprowadzanie na nim operacji arytmetycznych itp. ? jeżeli tak to w jaki sposób się to wykonuje ? Czy właśnie do tego służą komendy przytoczone w powyższych postach ?

1 użytkowników online, w tym zalogowanych: 0, gości: 1