{"id":727,"date":"2008-05-23T11:10:01","date_gmt":"2008-05-23T11:10:01","guid":{"rendered":"http:\/\/6teen.ru\/?p=722"},"modified":"2008-05-23T11:10:01","modified_gmt":"2008-05-23T11:10:01","slug":"6274","status":"publish","type":"post","link":"http:\/\/pblog.ru\/lab\/?p=727","title":{"rendered":"\u0421\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u0438\u0435 \u0438 \u0438\u0437\u0432\u043b\u0435\u0447\u0435\u043d\u0438\u0435 JPEG \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0439 (\u0438 \u043d\u0435 \u0442\u043e\u043b\u044c\u043a\u043e)"},"content":{"rendered":"<p>\u0421\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u0438\u0435 \u0438 \u0438\u0437\u0432\u043b\u0435\u0447\u0435\u043d\u0438\u0435 JPEG \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0439 (\u0438 \u043d\u0435 \u0442\u043e\u043b\u044c\u043a\u043e)<br \/>\n<!--more--><\/p>\n<pre class=\"alt2\" style=\"margin:0px; padding:6px; border:1px inset; width:580px; height:320px; overflow:auto\"><div>\u0421\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u0438\u0435 \u0438 \u0438\u0437\u0432\u043b\u0435\u0447\u0435\u043d\u0438\u0435 JPEG \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0439 (\u0438 \u043d\u0435 \u0442\u043e\u043b\u044c\u043a\u043e)\n\n\u041f\u043e\u043b\u044f \u0442\u0438\u043f\u0430 Graphic \u043f\u0440\u0435\u0434\u043d\u0430\u0437\u043d\u0430\u0447\u0435\u043d\u044b \u0434\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0441 \u0442\u0438\u043f\u0430\u043c\u0438 \u0434\u0430\u043d\u043d\u044b\u0445 Bitmap, Icon, Metafiles, \u043a\u0430\u043a \u0438 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442 DBImage.\n\n\u0427\u0442\u043e\u0431\u044b \u0441\u043e\u0445\u0440\u0430\u043d\u0438\u0442\u044c JPEG \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0435, \u043f\u043e\u043b\u0435 Blob \u0434\u043e\u043b\u0436\u043d\u043e \u0438\u043c\u0435\u0442\u044c \u043f\u043e\u0434\u0442\u0438\u043f Graphic, \u0442\u043e\u0433\u0434\u0430 \u043c\u044b \u0441\u043c\u043e\u0436\u0435\u043c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043f\u0440\u0438\u0432\u0435\u0434\u0435\u043d\u043d\u044b\u0439 \u043a\u043e\u0434.\n\nuses jpeg;\n\nprocedure TForm1.Button1Click(Sender: TObject);\nvar Jpg: TJpegImage;\n      Stream: TMemoryStream;\nbegin\nJpg := nil;\nStream := nil;\ntry\n\/\/ \u0421\u043e\u0437\u0434\u0430\u0436\u0438\u043c JPEG image \u0438 \u0437\u0430\u0433\u0440\u0443\u0437\u0438\u043c \u0432 \u043d\u0435\u0433\u043e \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0435 \u0438\u0437 \u0444\u0430\u0439\u043b\u0430\nJpg := TJpegImage.Create;\nJpg.LoadFromFile('test.jpg');\n\/\/ \u0421\u043e\u0437\u0434\u0430\u0434\u0438\u043c \u043f\u043e\u0442\u043e\u043a \u0438 \u0437\u0430\u0433\u0440\u0443\u0437\u0438\u043c \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0435 \u0432 \u043f\u043e\u0442\u043e\u043a\nStream := TMemoryStream.Create;\nJpg.SaveToStream(Stream);\nStream.Position := 0;\nTable1.Append;\n\/\/ \u041f\u043e\u043b\u0443\u0447\u0438\u043c \u0434\u0430\u043d\u043d\u044b\u0435 \u0438\u0437 \u043f\u043e\u0442\u043e\u043a\u0430 \u0432 \u043d\u0430\u0448\u0435 \u043f\u043e\u043b\u0435 Blob field\nTBlobField(Table1.FieldByName('Graph')).LoadFromStream(Stream);\nTable1.Post;\nexcept\njpg.Free;\nStream.Free;\nraise;\nend;\njpg.Free;\nStream.Free;\nend;\n\nTo display a JPEG image stored in a Blob field in a TImage control, we\ncan use a code like the following for example in an AfterScroll event:\n\nprocedure TForm1.Table1AfterScroll(DataSet: TDataSet);\nvar\nStream: TMemoryStream;\nJpg: TJpegImage;\nbegin\nJpg := nil;\nStream := nil;\ntry\n\/\/ Create a stream and load the contents of the Blob field\nStream := TMemoryStream.Create;\nTBlobField(Table1.FieldByName('Graph')).SaveToStream(Stream);\nif Stream.Size > 0 then begin\n\/\/ Create a JPEG image and load it from the stream\nJpg := TJpegImage.Create;\nStream.Position := 0;\nJpg.LoadFromStream(Stream);\n\/\/ Assign the JEPG image to the Picture property of an Image\nImage1.Picture.Assign(Jpg);\nend else\nImage1.Picture.Assign(nil);\nexcept\nImage1.Picture.Assign(nil);\nend;\njpg.Free;\nStream.Free;\nend;\n\nIf you want to be able to store different images types (bitmaps, icons,\nmetafiles and jpegs) in a field, we can add a byte at the beginning of\nthe stream to indicate the image kind, and then we have to read this\nbyte first to know how to load and display the image appropriately. We\ndesigned a full example to show how to do it.\n\n1) Place the following components on a form and set their properties:\n\nTable1: TTable\nTableName = 'GraphTest.DB'\nFieldDefs =\nField1\nName = 'Graph'\nDataType = ftBlob\nSize = 1\nStoreDefs = True\nDataSource1: TDataSource\nDataSet = Table1\nDBNavigator1: TDBNavigator\nDataSource = DataSource1\nAlign = alBottom\nPopupMenu1: TPopupMenu\nItems =\nmnuLoad: TMenuItem\nCaption = '&Load...'\nmnuClear: TMenuItem\nCaption = '&Clear'\nImage1: TImage\nPopupMenu = PopupMenu1\ndlgOpenPicture: TOpenPictureDialog\nOptions = [ofReadOnly, ofHideReadOnly, ofPathMustExist,\nofFileMustExist, ofNoTestFileCreate, ofEnableSizing]\n\n2) Add \"jpeg\" to the uses clause:\nuses\n..., jpeg;\n\n3) Add the following type declaration to the unit:\ntype\nTGraphType = (gtBitmap, gtIcon, gtMetafile, gtJpeg);\n\n4) Generate the following events:\nprocedure TForm1.FormCreate(Sender: TObject);\nbegin\nif Not FileExists('GraphTest.DB') then\nTable1.CreateTable;\nTable1.Open;\nend;\n\nprocedure TForm1.mnuLoadClick(Sender: TObject);\nvar\nJpg: TJpegImage;\nStream: TMemoryStream;\nFileExt: string;\nGraphType: TGraphType;\nbegin\nif dlgOpenPicture.Execute then begin\nJpg := nil;\nStream := nil;\ntry\nStream := TMemoryStream.Create;\nFileExt := LowerCase(ExtractFileExt(dlgOpenPicture.FileName));\nif (FileExt = '.bmp') or (FileExt = '.dib') then begin\nGraphType := gtBitmap;\nStream.Write(GraphType, 1);\nwith Image1.Picture.Bitmap do begin\nLoadFromFile(dlgOpenPicture.FileName);\nImage1.Picture.Bitmap.SaveToStream(Stream);\nend;\nend else if (FileExt = '.ico') then begin\nGraphType := gtIcon;\nStream.Write(GraphType, 1);\nwith Image1.Picture.Icon do begin\nLoadFromFile(dlgOpenPicture.FileName);\nImage1.Picture.Bitmap.SaveToStream(Stream);\nend;\nend else if (FileExt = '.emf') or (FileExt = '.wmf') then begin\nGraphType := gtMetafile;\nStream.Write(GraphType, 1);\nwith Image1.Picture.Metafile do begin\nLoadFromFile(dlgOpenPicture.FileName);\nImage1.Picture.Bitmap.SaveToStream(Stream);\nend;\nend else if (FileExt = '.jpg') or (FileExt = '.jpeg')\nor (FileExt = '.jpe') then begin\nJpg := TJpegImage.Create;\nJpg.LoadFromFile(dlgOpenPicture.FileName);\nImage1.Picture.Assign(Jpg);\nGraphType := gtJpeg;\nStream.Write(GraphType, 1);\nJpg.SaveToStream(Stream);\nend;\nif (Table1.State <> dsEdit) and (Table1.State <> dsInsert) then\nTable1.Edit;\nStream.Position := 0;\nTBlobField(Table1.FieldByName('Graph')).LoadFromStream(Stream);\nexcept\njpg.Free;\nStream.Free;\nraise;\nend;\njpg.Free;\nStream.Free;\nend;\nend;\n\nprocedure TForm1.mnuClearClick(Sender: TObject);\nbegin\nImage1.Picture.Assign(nil);\nif (Table1.State <> dsEdit) and (Table1.State <> dsInsert) then\nTable1.Edit;\nTable1.FieldByName('Graph').Assign(nil);  \/\/ Clear the field\nend;\n\nprocedure TForm1.Table1AfterScroll(DataSet: TDataSet);\nvar\nStream: TMemoryStream;\nJpg: TJpegImage;\nGraphType: TGraphType;\nbegin\nJpg := nil;\nStream := nil;\ntry\nStream := TMemoryStream.Create;\nTBlobField(Table1.FieldByName('Graph')).SaveToStream(Stream);\nif Stream.Size > 0 then begin\nStream.Position := 0;\nStream.Read(GraphType, 1);\ncase GraphType of\ngtBitmap:   Image1.Picture.Bitmap.LoadFromStream(Stream);\ngtIcon:     Image1.Picture.Icon.LoadFromStream(Stream);\ngtMetafile: Image1.Picture.Metafile.LoadFromStream(Stream);\ngtJpeg:   begin\nJpg := TJpegImage.Create;\nJpg.LoadFromStream(Stream);\nImage1.Picture.Assign(Jpg);\nend else\nImage1.Picture.Assign(nil);  \/\/ Clear the image\nend;\nend else\nImage1.Picture.Assign(nil);\nexcept\nImage1.Picture.Assign(nil);\nend;\njpg.Free;\nStream.Free;\nend;\n<\/div><\/pre>\n<p><\/p>\n","protected":false},"excerpt":{"rendered":"<p>\u0421\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u0438\u0435 \u0438 \u0438\u0437\u0432\u043b\u0435\u0447\u0435\u043d\u0438\u0435 JPEG \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0439 (\u0438 \u043d\u0435 \u0442\u043e\u043b\u044c\u043a\u043e)<\/p>\n","protected":false},"author":3,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":[],"categories":[397,434],"tags":[536,230,763,991,337],"_links":{"self":[{"href":"http:\/\/pblog.ru\/lab\/index.php?rest_route=\/wp\/v2\/posts\/727"}],"collection":[{"href":"http:\/\/pblog.ru\/lab\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/pblog.ru\/lab\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/pblog.ru\/lab\/index.php?rest_route=\/wp\/v2\/users\/3"}],"replies":[{"embeddable":true,"href":"http:\/\/pblog.ru\/lab\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=727"}],"version-history":[{"count":0,"href":"http:\/\/pblog.ru\/lab\/index.php?rest_route=\/wp\/v2\/posts\/727\/revisions"}],"wp:attachment":[{"href":"http:\/\/pblog.ru\/lab\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=727"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/pblog.ru\/lab\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=727"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/pblog.ru\/lab\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=727"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}