
![]() |
Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
|
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[3.134.111.37] |
![]() |
|
Сообщ.
#1
,
|
|
|
есть таблица и в ней есть 3 поля типа "Поле объекта ОЛЕ"
в этих полях я буду хранить изображения разного размера так вот изображения я помещать прямо в аксесе через CTRL+V при этом если я вставляю jpg, то в записи появляется слово "Плакат" если вставляю bmp, то в записи появляется "Точечный ричунок" и теперь хочу отобразить картинку через DBImage выставляю нужный датасорс и выставляю поле картинки (DataField) запускаю и выкатывается ошибка "Bitmap is not valid" на строчке ![]() ![]() procedure InvalidGraphic(Str: PResStringRec); begin raise EInvalidGraphic.CreateRes(Str); end; модуля Graphics что разве DBImage не поддерживает отображение картинок форматов jpg и bmp? Или что? |
Сообщ.
#2
,
|
|
|
а не пробывала считывать через поток картинку из БД?
|
Сообщ.
#3
,
|
|
|
Оля! Не поленись полазить в ПОИСКЕ - работа с BLOB-полями
![]() |
Сообщ.
#4
,
|
|
|
если успользовать DBCtrlGrid с вкладки DataControls (он мне нужен для отображения по 5 записей из таблицы БД)
значение ColCount = 1,значение RowCount = 5 на первой гладкой ячейки этого компонента есть DBLabel, DBMemo и обычный Image и при отображении изображений из поля они во всех Имейджах одинаковые ![]() ![]() ![]() function GetStreamImgType(Stream: TStream): TGraphicClass; var StreamPos: int64; ImgSign: string; begin StreamPos := Stream.Position; try //BMP Result := Graphics.TBitmap; //JPEG SetLength(ImgSign, 4); Stream.Seek(6, soFromCurrent); Stream.Read(ImgSign[1],4); if (UpperCase(ImgSign) = 'JFIF') or (UpperCase(ImgSign) = 'EXIF') then begin Result := Jpeg.TJPEGImage; Exit; end; //WMF Stream.Position := StreamPos; SetLength(ImgSign, 4); Stream.Read(ImgSign[1],4); if ImgSign = #$D7#$CD#$C6#$9A then //see WMFKey begin Result := Graphics.TMetafile; Exit; end; //PNG Stream.Position := StreamPos; SetLength(ImgSign, 3); Stream.Seek(1, soFromCurrent); Stream.Read(ImgSign[1],3); if (UpperCase(ImgSign) = 'PNG') then begin Result := PNGImage.TPNGImage; Exit; end; finally Stream.Position := StreamPos; end; end; /// procedure LoadProperImage(Stream: TStream; Picture: TPicture); var Img: TGraphic; StreamPos: int64; begin StreamPos := Stream.Position; Img := GetStreamImgType(Stream).Create; try Stream.Position := StreamPos; Img.LoadFromStream(Stream); Wid := img.Width; hei := img.Height; Picture.Graphic := Img; finally Img.Free; end; end; function LoadPictureFromBLOB(Picture: TPicture; Field: TBlobField): boolean; var Stream: TStream; begin Result := False; if not Field.isNULL then begin Stream := TMemoryStream.Create; try Field.SaveToStream(Stream); Stream.Position := 0; LoadProperImage(Stream, Picture); Result := True; finally Stream.Free; end; end; end; и ![]() ![]() procedure TForm1.FormCreate(Sender: TObject); begin Image1.Picture.Bitmap.FreeImage; LoadPictureFromBLOB(image1.Picture, AdoTable1.FieldByName('SMALL_IMAGE') as TBLOBField); end; получается что во всех имейджах одинаковые картинки как быть тогда Прикреплённый файл ![]() |
Сообщ.
#5
,
|
|
|
а если кинуть компонент DBImage и выставить нужное поле, то в дизайн-тайме сразу отображается картинка
Я обрадовалась но не тут-то было При компиляции приложения выскакивает опять "Bitmap is not valid" этот компонент недоделанный что-ли ![]() или я не то делаю ? Прикреплённый файл ![]() |
![]() |
Сообщ.
#6
,
|
|
Оля, посмотри в Королевстве Дельфи, было довольно много обсуждений ошибки "Bitmap image is not valid". В частности - здесь:
http://www.delphikingdom.com/asp/answer.asp?IDAnswer=15873 (ну, и по первой ссылке оттуда тоже сходи...) |
Сообщ.
#7
,
|
|
|
olga90
а ты куда прикрутила свой код вот этот ![]() ![]() Image1.Picture.Bitmap.FreeImage; LoadPictureFromBLOB(image1.Picture, AdoTable1.FieldByName('SMALL_IMAGE') as TBLOBField); на какое событие? |
Сообщ.
#8
,
|
|
|
Цитата dron-s @ olga90 а ты куда прикрутила свой код вот этот ![]() ![]() Image1.Picture.Bitmap.FreeImage; LoadPictureFromBLOB(image1.Picture, AdoTable1.FieldByName('SMALL_IMAGE') as TBLOBField); я уже писала - на onCreate формы |
Сообщ.
#9
,
|
|
|
Цитата olga90 @ я уже писала - на onCreate формы ну и что ты тогда хочешь от этого кода? у тебя получается что картинка загружается из той позиции, на которой у тебя находится курсор... а после перемещения на следующую позиции у тебя не происходит перезагрузки изображения... это не DBImage которая загружает картинку из той позиции на которой находится курсор... тут надо всё ручками делать ![]() |