|
|
|
Как правильно сохранять и восстанавливать изображения различніх типов в BLOB
|
|||
|---|---|---|---|
|
#18+
С BMP нет проблем, а вот при восстановлении не bmp (jpg) из блоб ругается Image1.Picture:=nil; Image1.Assign(TBlobField(DataModule1.PeopleDoc.FieldByName('DOC'+IntToStr(NomDoc)))); Image1.Update; ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.01.2004, 23:41 |
|
||
|
Как правильно сохранять и восстанавливать изображения различніх типов в BLOB
|
|||
|---|---|---|---|
|
#18+
Почему-то мне кажется, что вопрос не в этот форум. Могу подсказать. Сразу скажу, что GetStreamImgType написана плохо, но это рабочий вариант. uses Graphics, Jpeg; //как минимум :) function GetStreamImgType(Stream: TStream): TClass; 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 Result := Jpeg.TJPEGImage; //WMF Stream.Position := StreamPos; SetLength(ImgSign, 4); Stream.Read(ImgSign[1],4); if ImgSign = #$D7#$CD#$C6#$9A then Result := Graphics.TMetafile; finally Stream.Position := StreamPos; end; end; procedure LoadProperImage(Stream: TStream; Picture: TPicture); var Img: TGraphic; StreamPos: int64; begin StreamPos := Stream.Position; Img := TGraphicClass(GetStreamImgType(Stream)).Create; try Stream.Position := StreamPos; Img.LoadFromStream(Stream); 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 SavePictureToBlob(Picture: TPicture; Field: TBlobField); var Stream: TStream; begin if not (Field.DataSet.State in [dsEdit, dsInsert]) then Field.DataSet.Edit; Field.Clear; if Assigned(Picture.Graphic) then if not Picture.Graphic.Empty then begin Stream := TMemoryStream.Create; try Picture.Graphic.SaveToStream(Stream); Stream.Position := 0; Field.LoadFromStream(Stream); finally Stream.Free; end; end; end; ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.01.2004, 12:42 |
|
||
|
Как правильно сохранять и восстанавливать изображения различніх типов в BLOB
|
|||
|---|---|---|---|
|
#18+
Млин... Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68. 69. 70. 71. 72. 73. 74. 75. 76. 77. 78. 79. 80. 81. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.01.2004, 12:55 |
|
||
|
Как правильно сохранять и восстанавливать изображения различніх типов в BLOB
|
|||
|---|---|---|---|
|
#18+
Премного благодарен! Работает, как надо, правда только с bmp и jpg. А как насчет gif, ico, других (нужно еще хотя бы gif) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.01.2004, 14:08 |
|
||
|
Как правильно сохранять и восстанавливать изображения различніх типов в BLOB
|
|||
|---|---|---|---|
|
#18+
В чем проблема? У каждого графического файла есть сигнатура. Подшей определение в GetStreamImgType и возвращай нужный тип ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.01.2004, 14:18 |
|
||
|
Как правильно сохранять и восстанавливать изображения различніх типов в BLOB
|
|||
|---|---|---|---|
|
#18+
Я так и делаю: Только не пойму, что с GIF8 писать: ... //WMF Stream.Position := StreamPos; SetLength(ImgSign, 4); Stream.Read(ImgSign[1],4); if (ImgSign = #$D7#$CD#$C6#$9A) then Result := Graphics.TMetafile else if UpperCase(ImgSign) = 'GIF8' then //что тут //Result := ??? ... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.01.2004, 14:23 |
|
||
|
Как правильно сохранять и восстанавливать изображения различніх типов в BLOB
|
|||
|---|---|---|---|
|
#18+
Хе. Для этого сначала нужно найти модуль, реализующий работу с gif, аналогично Jpeg, присоединить его, ну и писать тот тип, который в нем есть. А исходно в Dephi работы с гифами нет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.01.2004, 14:30 |
|
||
|
|

start [/forum/topic.php?fid=40&msg=32372165&tid=1579405]: |
0ms |
get settings: |
6ms |
get forum list: |
11ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
186ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
34ms |
get tp. blocked users: |
1ms |
| others: | 230ms |
| total: | 484ms |

| 0 / 0 |
