Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Выгрузка картинки из поля MSSQL в jpg файл [D7, XP]


Страницы:   1 2

mefodiy ©   (2008-08-29 10:48:00) 

В MSSQL есть BLOB поле под названием 'Picture'. Нужно получить и сохранить его в виде JPEG файла.
Делаю так:

(FieldByName('Picture') as TBlobField).SaveToFile('c:\1.jpg');

Файл нормально создается, но не открывается ни одним просмотрщиком картинок. Вероятно, файл создается с "неправильной" структурой.
В чем тут может быть дело?
Спасибо.


Ega23   (2008-08-31 14:19:00) [1]


> Первые четыре байта:
> 01 44 7C 5A
>


Это не jpeg. Вообще непонятно, что это такое.


Amoeba   (2008-08-29 22:01:00) [2]


> mefodiy   (29.08.08 19:46) [20]
>
> Первые четыре байта:
> 01 44 7C 5A
>

Это х.з., но только не JPEG: FFD8FFE1


mefodiy   (2008-08-29 19:46:00) [3]

Первые четыре байта:
01 44 7C 5A


Vlad Oshin   (2008-08-29 16:52:00) [4]


> Рисунок у них в базе может хранится как угодно, допустим
> bmp сжатый раром или зипом

кстати, да. Не понятно зачем, но может.
Может его сохранить как zip и натравить архиватор?
zip - просто, архиваторы теперь умные, сами попробуют определить что это.


Anatoly Podgoretsky   (2008-08-29 16:31:00) [5]

После "(FieldByName('Picture') as TBlobField).SaveToFile('c:\1.jpg');" посмотреть любым HEX редактором, результат сюда.


stas   (2008-08-29 15:48:00) [6]

>mefodiy   (29.08.08 15:42) [14]
В BLOB хранится может все что угодно
stas ©   (29.08.08 13:25) [9]


Ega23   (2008-08-29 15:47:00) [7]


> Как могу посмотреть первые 4 байта?


stream.readBuff


Vlad Oshin   (2008-08-29 15:44:00) [8]


> Как могу посмотреть первые 4 байта?

hex редактор


mefodiy   (2008-08-29 15:42:00) [9]

>Значит надо делать средствами Navision, видимо хранится не в чистом, а в >своем формате, при экспорте преобразовывается в нужный.

База данных Navision построена на MSSQL и тип поля там BLOLB.
К сожалению, это надо делать именно средствами Дельфи.
Как могу посмотреть первые 4 байта?


Anatoly Podgoretsky   (2008-08-29 15:13:00) [10]

Значит надо делать средствами Navision, видимо хранится не в чистом, а в своем формате, при экспорте преобразовывается в нужный.

И где первые четыре байта файла?


Плохиш   (2008-08-29 14:15:00) [11]


> mefodiy   (29.08.08 14:02) [11]
> Все нормально читается

А теперь попробуй выгрузить их с помощью

> Вообще-то это БД от Navision. В самом Navision есть возможность
> выгружать картинки командами
> Picture.EXPORT('c:\1.jpg');
> Picture.EXPORT('c:\1.bmp');

А потом долго подумай...


mefodiy   (2008-08-29 14:02:00) [12]

>а если
>загрузить(средствами delphi )
>заранее читаемую(средствами delphi ) картинку и
>выгрузить(средствами delphi )
>, читается?

 MyPicture.LoadFromFile('...');
 MyPicture.SaveToFile('...');

Все нормально читается


Vlad Oshin   (2008-08-29 13:25:00) [13]

а если

загрузить(средствами delphi )
заранее читаемую(средствами delphi ) картинку и
выгрузить(средствами delphi )

, читается?


stas   (2008-08-29 13:25:00) [14]

mefodiy   (29.08.08 12:54) [6]
Рисунок у них в базе может хранится как угодно, допустим bmp сжатый раром или зипом.


mefodiy   (2008-08-29 13:12:00) [15]

>JPEG error #53 - Insufficient Memory
Как лечить?


Ega23   (2008-08-29 13:00:00) [16]


JPEG error #36 - Output File Error - Possibly out of disk space
JPEG error #51 - Quantization table not defined
JPEG error #52 - File is not a JPEG file
JPEG error #53 - Insufficient Memory
JPEG error #60 - Incomplete File
JPEG error #67 - Incomplete File


mefodiy   (2008-08-29 12:54:00) [17]

Дополнительная информация

Вообще-то это БД от Navision. В самом Navision есть возможность выгружать картинки командами
Picture.EXPORT('c:\1.jpg');
Picture.EXPORT('c:\1.bmp');
И тот, и другой формат после выгрузки нормально просматривается всеми известными программами. Но в Delphi, если через TImage bmp загружается и просматриватся нормально, то jpg дает ошибку "JPEG error #53".
В то же время
  1. (FieldByName('Picture') as TBlobField).SaveToFile('c:\1.jpg');
при выполнении ошибки не дает, но созданный файл при загрузке в TImage дает ту же ошибку "JPEG error #53".  
  2. Команда
  Image1.Picture.Bitmap.Assign(TBLOBField(FieldByName('Picture')));
при выполнении дает ошибку:
"Bimap image is not valid"


Ega23   (2008-08-29 11:16:00) [18]

автор, какие первые 4 байта в c:\1.jpg?


Плохиш   (2008-08-29 11:12:00) [19]


> mefodiy   (29.08.08 10:48)  
> В MSSQL есть BLOB полепод названием 'Picture'. Нужно получить
> и сохранить его в виде JPEG файла.

Хм, оригинально, какой-нибуть ворд-документ в виде jpeg файла :-))


Ega23   (2008-08-29 11:07:00) [20]


> Вероятно, файл создается с "неправильной" структурой.
> В чем тут может быть дело?


Из базы выгружаешь правильно. Значит там лежит некорректный jpeg. Или вообще не jpeg.


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо