Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 25.07.2011, 15:15   #1
roulis2844sasha
Пользователь
 
Регистрация: 19.07.2011
Сообщений: 19
По умолчанию изображения из интернета

вот нашел я код

Код:
function TForm2.GetImage(url:string): TPicture;
var
  hInternet, hConnect: pointer;
  dwBytesRead, i, L: cardinal;
  sTemp,aUrl: AnsiString; // текст страницы
  memStream: TMemoryStream;
  jpegimg: TJPEGImage;
begin
  hInternet := InternetOpen('MyApp', INTERNET_OPEN_TYPE_PRECONFIG, nil, nil, 0);
  try
    if Assigned(hInternet) then
    begin
      hConnect := InternetOpenUrl(hInternet, PChar(url), nil, 0, 0, 0);
      if Assigned(hConnect) then
        try
          i := 1;
          repeat
            SetLength(sTemp, L + i);
            if not InternetReadFile(hConnect, @sTemp[i], sizeof(L),dwBytesRead) then
              break; // Получаем данные с сервера
            inc(i, dwBytesRead);
            until dwBytesRead = 0;
        finally
          InternetCloseHandle(hConnect);
        end;
    end;
  finally
    InternetCloseHandle(hInternet);
  end;
  memStream := TMemoryStream.Create;
  jpegimg := TJPEGImage.Create;
  try
    memStream.Write(sTemp[1], Length(sTemp));
    memStream.Position := 0;
    //загрузка изображения из потока
    jpegimg.LoadFromStream(memStream);
    Result:=TPicture.Create;
    Result.Assign(jpegimg);
  finally
    //очистка
    memStream.Free;
    jpegimg.Free;
  end;
end;
вызывается так
Код:
GetImage('ссылка на изображение');
работает отлично, но как сделать чтоб работало и для bmp, png, gif
если пользователь укажет в виде аватарки например картинку с расширением gif то выскакивает ошибка
jpeg error #53
roulis2844sasha вне форума Ответить с цитированием
Старый 25.07.2011, 15:30   #2
Человек_Борща
Старожил
 
Аватар для Человек_Борща
 
Регистрация: 30.12.2009
Сообщений: 11,426
По умолчанию

КО в ужасе.
Цитата:
jpeg error #53
И понятное дело=) Пытаться преобразовать png & gif в jpg. Сорри там формат другой. дельфи твоих "странных" мыслей не понимает.

1. используй TidHTTP
2. Используй TgifImage
3. Используй TPngImage

Все выше перечисленно гуглить в этом форуме, или в гугле. Информации тонны.
Человек_Борща вне форума Ответить с цитированием
Старый 25.07.2011, 15:42   #3
roulis2844sasha
Пользователь
 
Регистрация: 19.07.2011
Сообщений: 19
По умолчанию

а как этот код изменить чтоб он поддерживал все расширения изображений?
roulis2844sasha вне форума Ответить с цитированием
Старый 25.07.2011, 15:45   #4
Человек_Борща
Старожил
 
Аватар для Человек_Борща
 
Регистрация: 30.12.2009
Сообщений: 11,426
По умолчанию

найти все нпобходимые модули для поддержки. Впрочем я уже написал какие тебе нужны. Гугли.
Человек_Борща вне форума Ответить с цитированием
Старый 25.07.2011, 15:46   #5
Aliens_wolfs
Форумчанин
 
Регистрация: 16.12.2009
Сообщений: 902
По умолчанию

Делай проверку по разрешению и запускай отдельные процедуры под каждый формат передавая им ресурс изображения

в Uses
JPEG,
gifimage-скачай этот юнит если нет, он работает как JPEG,
PngImage- тоже где то видел простенький

Код:
function TForm2.GetImage(url:string): TPicture;
var
  hInternet, hConnect: pointer;
  dwBytesRead, i, L: cardinal;
  sTemp,aUrl: AnsiString; // текст страницы
  memStream: TMemoryStream;
begin
  hInternet := InternetOpen('MyApp', INTERNET_OPEN_TYPE_PRECONFIG, nil, nil, 0);
  try
    if Assigned(hInternet) then
    begin
      hConnect := InternetOpenUrl(hInternet, PChar(url), nil, 0, 0, 0);
      if Assigned(hConnect) then
        try
          i := 1;
          repeat
            SetLength(sTemp, L + i);
            if not InternetReadFile(hConnect, @sTemp[i], sizeof(L),dwBytesRead) then
              break; // Получаем данные с сервера
            inc(i, dwBytesRead);
            until dwBytesRead = 0;
        finally
          InternetCloseHandle(hConnect);
        end;
    end;
  finally
    InternetCloseHandle(hInternet);
  end;
 memStream := TMemoryStream.Create;
  try
    memStream.Write(sTemp[1], Length(sTemp));
    memStream.Position := 0;
    //загрузка изображения из потока
//Извлекай строку с разрешением и проверяй
  if pos('.png', AnsiLowerCase(url)) <> 0 then
  result:=//Запускай функцию обработки png и передай ресурс возвращай TPicture
  else if pos('.jpg', AnsiLowerCase(url)) <> 0 then
   result:= LoadJpg(memStream); //Запускай функцию обработки jpg и передай ресурс возвращай TPicture
  else if pos('.bmp', AnsiLowerCase(url)) <> 0 then
   result:= //Запускай функцию обработки Bmp и передай ресурс возвращай TPicture
  else if pos('.gif', AnsiLowerCase(url)) <> 0 then
   result:=//Запускай функцию обработки Gif и передай ресурс возвращай TPicture
  finally
    //очистка
    memStream.Free;
  end;
end;
Код:
function TForm2.LoadJpg(memStream:TMemoryStream): TPicture;
var
jpegimg: TJPEGImage;
begin
  jpegimg := TJPEGImage.Create;
  try
    //загрузка изображения из потока
    jpegimg.LoadFromStream(memStream);
    Result:=TPicture.Create;
    Result.Assign(jpegimg);
  finally
    //очистка
    jpegimg.Free;
end;
Примерно так
Функции обработки изображения дорабатывай сам, темболее jpg у тебя есть

Последний раз редактировалось Aliens_wolfs; 25.07.2011 в 16:06.
Aliens_wolfs вне форума Ответить с цитированием
Старый 25.07.2011, 15:49   #6
roulis2844sasha
Пользователь
 
Регистрация: 19.07.2011
Сообщений: 19
По умолчанию

а как программно можно узнать расширение изображения?
roulis2844sasha вне форума Ответить с цитированием
Старый 25.07.2011, 15:50   #7
roulis2844sasha
Пользователь
 
Регистрация: 19.07.2011
Сообщений: 19
По умолчанию

Aliens_wolfs спасибо, щас попробую
roulis2844sasha вне форума Ответить с цитированием
Старый 25.07.2011, 15:57   #8
raxp
Старожил
 
Регистрация: 29.09.2009
Сообщений: 9,713
По умолчанию

...таки для конвертации лучше через GDI+.
Разработки и научно-технические публикации :: Видеоблог :: Твиттер
Radar systems engineer & Software developer of industrial automation
raxp вне форума Ответить с цитированием
Старый 25.07.2011, 16:01   #9
roulis2844sasha
Пользователь
 
Регистрация: 19.07.2011
Сообщений: 19
По умолчанию

http://www.google.kz/search?hl=ru&q=...91l2-1.2.1.3l7
гугл недал ответа на
"процедура обработки Gif delphi"
и для других расширений он тоже нече не дал.
Объясните что это такое?
roulis2844sasha вне форума Ответить с цитированием
Старый 25.07.2011, 16:08   #10
Aliens_wolfs
Форумчанин
 
Регистрация: 16.12.2009
Сообщений: 902
По умолчанию

Можно и через GDI нужна будет попиксельная обработка

В поисковике набери GIFImage в Delphi

Последний раз редактировалось Aliens_wolfs; 25.07.2011 в 16:13.
Aliens_wolfs вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Загрузка изображения из интернета в программу Crystallon Общие вопросы Delphi 1 12.09.2010 20:21
Макросом с ИНТЕРНЕТА sasha_prof Microsoft Office Excel 17 05.08.2010 18:18
Перезагрузка интернета Nice42ru Помощь студентам 3 05.01.2010 22:49
Чтение изображения из базы данных, Вместо изображения - "System.Byte[]" ruelCrow Общие вопросы .NET 3 10.07.2008 23:29