JPEG error #42

problemy z tworzeniem aplikacji graficznych oraz audio i wideo

JPEG error #42

Nowy postprzez Michalos » sobota, 21 marca 2009, 00:00

Witam!

Pobieram obrazek na dysk, i wyświetlam go w obiekcie TImage. Wszystko jest ok za pierwszym razem jak wczytuję :) Ale gdy nacisnę drugi raz na przycisk "pobierz" to wyskakuje komunikat z JPEG error #42.

Kod odpowiedzialny za wyświetlenie obrazka
Kod: Zaznacz cały
  int iFile = FileCreate("C:\\image.jpg");
  FileClose(iFile);
  URLDownloadToFile(NULL, Url.c_str(), "c:\\image.jpg", 0, NULL);
  Image1->Picture->LoadFromFile("c:\\image.jpg");


Chciałem wyczyscić Image na samym początku zdarzenia dla tego przycisku, ale nie bardzo wiem jak, próbowałem tak
Kod: Zaznacz cały
Image1->Picture->Free()

Ale to nie zadziałało, zapewne działanie tej funkcji nie jest do tego, do czego chcę to użyć.
Znacie jakąś receptę na mój problem ?
Avatar użytkownika
Michalos
Bladawiec
Bladawiec
 
Posty: 35
Dołączył(a): niedziela, 19 października 2008, 11:45
PodziÄ™kowaÅ‚ : 1
OtrzymaÅ‚ podziÄ™kowaÅ„: 0
    NieznanyNieznana

Re: JPEG error #42

Nowy postprzez Cyfrowy Baron » sobota, 21 marca 2009, 09:20

W Twoim przypadku stosowanie tych funkcji nie ma absolutnie żadnego uzasadnienia. Tak się dla Ciebie szczęśliwie składa, ze właśnie pracuję nad aktualizacją serwisu Cyfrowy Baron i nad poradą jak pobierać za pomocą funkcji URLDownloadToFile oraz jak je wyświetlać bezpośrednio z sieci za pomocą funkcji URLOpenBlockingStream, dlatego podam gotowe rozwiązanie dla Twojego problemu:

Kod: Zaznacz cały
#include <urlmon.h>
#pragma comment(lib, "urlmon.lib") // jeżeli włączamy bibliotekę przez menu Project | Add to project, to ta linijka jest zbędna

String FileName = "grafika.jpg";
AnsiString Url = "http://cyfbar.republika.pl//images//img1.jpg";
AnsiString FileResult = "c:\\" + FileName;


URLDownloadToFile(0, Url.c_str(), FileResult.c_str(), 0, 0);

if(FileExists(FileResult))  Image1->Picture->LoadFromFile(FileResult);


Nie bardzo rozumiem czemu zdecydowałeś się tworzyć plik na dysku przed jego pobraniem, funkcja URLDownloadToFile tego nie wymaga, po pobraniu pliku sama go sobie utworzy.

W poradach o których wspomniałem będzie między innymi jak prezentować proces ściągania za pomocą paska postępu.

Image1->Picture->Free()


Funckja Free nie uwolni obiektu Image od grafiki lecz całkowicie usunie z pamięci obiekt klasy TPicture, co uniemożliwi ponowne wczytanie grafiki do Image, usunięcie obiektu Picture jest oczywiście równoznaczne z usunięciem grafiki, gdyż cały obiekt Picture przestaje istnieć.

Obiekt Picture należy raczej czyścić tak:

Kod: Zaznacz cały
  Image1->Picture = NULL;


Pracuję właśnie nad pewnym programem, który musi czyścić obiekt Image i wiem z doświadczenia, że przypisanie wartości NULL do Picture czyści go z grafiki, ale w pewnych sytuacjach komplikuje sprawę.
Avatar użytkownika
Cyfrowy Baron
Administrator
Administrator
 
Posty: 4716
Dołączył(a): niedziela, 13 lipca 2008, 15:17
PodziÄ™kowaÅ‚ : 12
OtrzymaÅ‚ podziÄ™kowaÅ„: 442
System operacyjny: Windows 7 x64 SP1
Kompilator: Embarcadero RAD Studio XE2
C++ Builder XE2 Update 4
SKYPE: cyfbar
Gadu Gadu: 0
    NieznanyNieznana


  • Podobne tematy
    Odpowiedzi
    Wyświetlone
    Ostatni post

Powrót do Aplikacje multimedialne, graficzne

Kto przeglÄ…da forum

Użytkownicy przeglądający ten dział: Brak zalogowanych użytkowników i 0 gości