Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

TImage не видит файлы

41K
26 февраля 2010 года
Shurikk
4 / / 06.09.2008
Здравствуйте, возникла проблема с программой. На форме DBGrid. При клике на строке формируется адрес изображения, который выводится в Edit. В нем адрес выглядит правильно и при копипасте его в браузер картинка открывается. На форме есть Image, по клику на котором он берет адрес из Edit и пытается загрузить по нему картинку. Картинку вставляю следующим кодом:
Код:
AnsiString pat=Edit1->Text;

HDC dc;
Graphics::TBitmap *bmp=new Graphics::TBitmap;
dc=bmp->Canvas->Handle;
TPicture *Pic = new TPicture();
Pic->RegisterFileFormat(__classid(TJPEGImage), "jpg", "jpg", __classid(TJPEGImage));
Pic->LoadFromFile(pat);
bmp->Width=Pic->Width;
bmp->Height=Pic->Height;

BitBlt(dc,0,0,100,100,Pic->Bitmap->Canvas->Handle,0,0,SRCCOPY);
Image1->Picture->Bitmap->Assign(bmp);
}


Но это не срабатывает, вываливает ошибку EFOpenError что не может открыть файл по указанному пути хотя он в тексте ошибки указывается правильный.
Пример пути:
 
Код:
X:\pics\plans\blank\1.5.jpg
11
26 февраля 2010 года
oxotnik333
2.9K / / 03.08.2007
TBitmap не умеет работать напрямую c *.jpg
надо сначала грузить в TJPEGImage, а потом
TBitmap::Assign(TJPEGImage*)
41K
27 февраля 2010 года
Shurikk
4 / / 06.09.2008
Ясно, спасибо, теперь пользуюсь
 
Код:
AnsiString pat=Edit1->Text;
Graphics::TBitmap * Bitmap = new Graphics::TBitmap;
TJPEGImage * examp = new TJPEGImage;
jpgfile->LoadFromFile(pat);
Bitmap->Assign(jpgfile);
Image1->Canvas->Draw(10,10,Bitmap);
delete jpgfile;

и тут выяснил что он не хочет брать файлы с сетевого диска, делаю копию на C:/ - видит, загружает. Ставлю в пути сетевой Z:/, на котором оригинал, и нифига(

вспомнил, что запускаю билдер от имени администратора, а у него не подключены сетевые диски:)
11
27 февраля 2010 года
oxotnik333
2.9K / / 03.08.2007
а если попробовать через TOpenFileDialog::FileName ?
сдается ошибка в пути, либо не хватает прав на сетевой
41K
27 февраля 2010 года
Shurikk
4 / / 06.09.2008
а как сделать чтобы при смене изображений не забивалась память?, в данный момент Image1 находится на Form2(не auto-creat)
Код:
AnsiString pat=Edit1->Text;
Form2=new TForm2(this);
Form2->Visible=true;
Form2->Image1->Picture->Assign(0);

Graphics::TBitmap * Bitmap = new Graphics::TBitmap;
TJPEGImage * examp = new TJPEGImage;
jpgfile->LoadFromFile(pat);
Bitmap->Assign(jpgfile);
Form2->Image1->Canvas->Draw(10,10,Bitmap);
delete jpgfile;
}

Закрывается вторая форма по клику на Image
 
Код:
Form2->Close();


При этом потребляемая память увеличивается с каждой новой картинкой. Как нужно закрывать форму/изображение чтобы подчищалась память?
1
27 февраля 2010 года
kot_
7.3K / / 20.01.2000
В обработчике события OnClose() не забыть указать:
 
Код:
Action = caFree;
11
27 февраля 2010 года
oxotnik333
2.9K / / 03.08.2007
Цитата: kot_
В обработчике события OnClose() не забыть указать:
 
Код:
Action = caFree;


не поможет, надо тогда дочерним объектам Owner-а эту форму прописывать

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог