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

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

Вернуться   Форум программистов > Delphi программирование > Мультимедиа в Delphi
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 25.01.2008, 11:06   #1
NoName_emaNoN
Форумчанин
 
Аватар для NoName_emaNoN
 
Регистрация: 15.11.2007
Сообщений: 229
По умолчанию Технология JPG

Не буду объяснять всеё картины происходящего, только суть: есть JPG/JPEG файл, как файл он разделён на порции, допустим на 10, и вопрос в следующем можно ли как нибудь воспроизвести ту часть картинки, которая находится в этой одной десятой файла. Пробовал через текстовый редактор убрать часть файла, и всё картинка не читается, но Опера же как-то не докачав файл до канца уже показывает его, вопрос собственно этом и состоит, как показать незаконченный файл?
Компьютер не подчиняется законам физики: глюки возникают из ниоткуда, файлы исчезают в никуда, а вес измеряется в метрах.
NoName_emaNoN вне форума Ответить с цитированием
Старый 25.01.2008, 11:26   #2
B_N
Новичок
Джуниор
 
Регистрация: 18.01.2008
Сообщений: 1,720
По умолчанию

Не только опера, кто угодно покажет начало файла, как минимум, если не отрезать заголовок. В чем проблема-то?
B_N вне форума Ответить с цитированием
Старый 25.01.2008, 11:32   #3
NoName_emaNoN
Форумчанин
 
Аватар для NoName_emaNoN
 
Регистрация: 15.11.2007
Сообщений: 229
По умолчанию

Я ж пишу, что есть JPG файл, обрезанный...
Ладно объясню полностью. Передаётся картинка через инет, кусками, т.е. передаётся не сама картинка, а файл, и если это картинка, то нужно чтобы отображалась уже закачанная часть. Опера это делает, IE, тоже по моему, как сделать это мне, вот в чём вопрос? Как показать не докачавшуюся картинку? Если попробовать с помощью простово текстоваго редактора вырезать кусок картинки, то пишется, что просмотр невозможен, дак как сделать, чтобы можно было посмотреть? Надеюсь так будет ясней.
Компьютер не подчиняется законам физики: глюки возникают из ниоткуда, файлы исчезают в никуда, а вес измеряется в метрах.
NoName_emaNoN вне форума Ответить с цитированием
Старый 25.01.2008, 11:39   #4
B_N
Новичок
Джуниор
 
Регистрация: 18.01.2008
Сообщений: 1,720
По умолчанию

А я и с первого раза понял, и пишу: если у файла есть заголовок и хоть немного "начала", его кто угодно покажет, хоть опера, хоть irfanview, хоть acdsee (ну до первых повреждений, как минимум). Я так думаю, в данном случае, все крепко зависит от "простоты" текстового редактора, иной может так изуродовать то, что не посчитает текстом, что там уже и не поймешь ничего. С FAR'ом этот эксперимент проделан миллионы раз, никаких проблем не наблюдалось.
B_N вне форума Ответить с цитированием
Старый 25.01.2008, 12:13   #5
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,792
По умолчанию

А что обычный способ открытия в Делфи обрезанного jpg не даст части изображения?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 25.01.2008, 13:28   #6
NoName_emaNoN
Форумчанин
 
Аватар для NoName_emaNoN
 
Регистрация: 15.11.2007
Сообщений: 229
По умолчанию

Может и отображается, может у меня не отображается потому что пользовался Майкрософтским блокнотом, может из-за него, но тут попробовал через делфи буфером считать из файла, и записать в другой.

Ни винда, ни TImage не показывают картинку, ошибка "JPEG Error #51".

Вот код:

Код:
procedure TForm1.Button1Click(Sender: TObject);
var F:File;
buf:array [1..1024] of byte;
buflen:integer;
begin
buflen:=1024;
assignfile(f,Edit1.text);
reset(F,1);

BlockRead(F,buf,buflen);
closefile(F);

assignfile(F,ExtractFilePath(Edit1.text)+'picmod.jpg');
rewrite(f,1);
BlockWrite(F,buf,buflen);
closefile(F);
Image1.picture.loadfromfile(ExtractFilePath(Edit1.text)+'picmod.jpg');
end;
Может я не правильно код написал?

P.S. Попробовал через TFileStream, тоже самое, просмотр не доступен, кстати с bmp так же.
Компьютер не подчиняется законам физики: глюки возникают из ниоткуда, файлы исчезают в никуда, а вес измеряется в метрах.

Последний раз редактировалось NoName_emaNoN; 25.01.2008 в 13:44. Причина: Дополнил
NoName_emaNoN вне форума Ответить с цитированием
Старый 25.01.2008, 13:44   #7
JTG
я получил эту роль
Старожил
 
Аватар для JTG
 
Регистрация: 25.05.2007
Сообщений: 3,694
По умолчанию

Дельфийский TImage и битмапы-то не все переваривает (я про stream read error), что-уж там говорить про битый JPEG. Пробуй менее прихотливые библиотеки типа TImageLib (там и поддержка "неубиваемого" jpeg200 есть) или что-нибудь из JEDI

А вообще урезанный JPEG прекрасно открывается этакими полосками по 8 пикселей если в заголовке нет ошибок. А если jpg сохранён с прогрессией - то отображается сразу весь рисунок, но с низкой детализацией, которая увеличивается по мере поступления новых данных (обычно в 3-5 шагов)

ЗЫ: error51 - JERR_NO_QUANT_TABLE: QUANIZATION table was not defined. Откуси кусок файла побольше, хотя в 1ом килобайте это всё должно уже быть. Попробуй ещё другой файл, т.е. сохранённый другой программой
пыщь

Последний раз редактировалось JTG; 25.01.2008 в 13:51.
JTG вне форума Ответить с цитированием
Старый 25.01.2008, 13:57   #8
NoName_emaNoN
Форумчанин
 
Аватар для NoName_emaNoN
 
Регистрация: 15.11.2007
Сообщений: 229
По умолчанию

"сохранён с прогрессией" - можно поточнее.

Пробовал кусать 11 Кбайт, но эффекта ноль, пробовал другой файл (изи инета один, сохр. фотошопом другой), опять та же картина, может потоками чо не правильно делаю?

Код:
var S1,S2:TFileStream;
buf : array [1..1024] of byte;
buflen,i:integer;
begin
buflen:=1024;
S1:=TFileStream.Create(Edit1.Text,fmOpenRead);
S2:=TFileStream.Create(ExtractFilePath(Edit1.text)+'picmod.jpg',fmCreate or fmOpenWrite);

for i:=0 to 10 do begin
S1.Read(buf,buflen);
//мне кажется тут seek должно быть
S2.Write(buf,buflen);
end;

S2.Free;
S1.Free;
Компьютер не подчиняется законам физики: глюки возникают из ниоткуда, файлы исчезают в никуда, а вес измеряется в метрах.
NoName_emaNoN вне форума Ответить с цитированием
Старый 25.01.2008, 14:05   #9
BOBAH13
Android Developer
Старожил Подтвердите свой е-майл
 
Аватар для BOBAH13
 
Регистрация: 19.02.2007
Сообщений: 3,708
По умолчанию

Первым делом разберитесь с жатием Jpeg, и как на лету его перекадировать в RGB ( 15, 16, 24, 32 бита )... Я не пойму а что вы точно делаете ? Я не пойму что Вы пишите и читаете из другого файла ?
BOBAH13 вне форума Ответить с цитированием
Старый 25.01.2008, 14:11   #10
NoName_emaNoN
Форумчанин
 
Аватар для NoName_emaNoN
 
Регистрация: 15.11.2007
Сообщений: 229
По умолчанию

Цитата:
Сообщение от BOBAH13 Посмотреть сообщение
Первым делом разберитесь с жатием Jpeg, и как на лету его перекадировать в RGB ( 15, 16, 24, 32 бита )... Я не пойму а что вы точно делаете ? Я не пойму что Вы пишите и читаете из другого файла ?
Перекодировать в принципе можно Image1.Picture.Bitmap.PixelFormat:= pf8bit; а потом перевести в JPG, но ЗАЧЕМ ЭТО?

Из первого файла я читаю буфер, а во второй его записываю, по логике должно получится правильно, но вот в дейстительности.....
Компьютер не подчиняется законам физики: глюки возникают из ниоткуда, файлы исчезают в никуда, а вес измеряется в метрах.
NoName_emaNoN вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
технология COM DM_bite Общие вопросы Delphi 5 01.08.2008 10:27