Bitmap image is not valid delphi как исправить

1 / 1 / 0

Регистрация: 24.03.2015

Сообщений: 206

1

01.06.2015, 22:32. Показов 17639. Ответов 35


Студворк — интернет-сервис помощи студентам

Очень нужна помощь!
Создал БД , подключил к делфе , всё работает кроме 2-ух колонок : 1)колонка «фото» .
В базе данных я указал путь к картинке , пробовал различные разрешения , подключил компонент DbImage — пишет
«bitmap is not valid».
2) колонка «описание» . Я так понял из-за бол. кол. информации она мне выводит одно слово [Memo] — Можно как то решить проблему или лучше стоит подключить компонент DbMemo ?
P.S. База подключена правильно , сама база работает! В библиотеку подключал jpeg.



0



1 / 1 / 0

Регистрация: 14.09.2014

Сообщений: 372

02.06.2015, 01:21

2

Я себе тоже пробовал подключить jpeg но он не работал. Пришлось мучаться с bmp. Однако, твоя ошибка у меня тоже появлялась. Была она из-за кривого формата картинки. И поэтому пришлось пересохранять.
Дб мемо у меня есть,ставил в базе в колонке букву M и все работает.
Возможно у тебя не сделан пост и редактирование изображения…Если конечно у тебя отдельная форма для добавления записи, которая потом все переносит в бд



0



1 / 1 / 0

Регистрация: 24.03.2015

Сообщений: 206

02.06.2015, 14:02

 [ТС]

3

Дело в том что я пробовал кидать картинки с расширением bmp, выскакивала таже самая ошибка.
P.S. пересохранял картинки чере паинт, мб из-за этого?



0



1 / 1 / 0

Регистрация: 14.09.2014

Сообщений: 372

02.06.2015, 19:39

4

Цитата
Сообщение от T-Tim
Посмотреть сообщение

P.S. пересохранял картинки чере паинт, мб из-за этого?

256 bmp



0



1 / 1 / 0

Регистрация: 24.03.2015

Сообщений: 206

02.06.2015, 22:06

 [ТС]

5

Что такое 256 bmp?



0



21 / 9 / 3

Регистрация: 24.05.2014

Сообщений: 60

02.06.2015, 22:10

6

Какая СУБД?

Цитата
Сообщение от T-Tim
Посмотреть сообщение

Что такое 256 bmp?

Полагаю это количество изображений.



0



1 / 1 / 0

Регистрация: 14.09.2014

Сообщений: 372

03.06.2015, 02:57

7

Цитата
Сообщение от T-Tim
Посмотреть сообщение

Что такое 256 bmp?

при сохранении в паинте выбирай 256



0



1 / 1 / 0

Регистрация: 24.03.2015

Сообщений: 206

03.06.2015, 09:01

 [ТС]

8

Есть ещё какие варианты решения проблемы???



0



Модератор

3488 / 2611 / 741

Регистрация: 19.09.2012

Сообщений: 7,971

03.06.2015, 10:06

9

Покажи код загрузки картинок и текста.



0



1 / 1 / 0

Регистрация: 24.03.2015

Сообщений: 206

03.06.2015, 10:12

 [ТС]

10

Кода нет. Картинки загрузил в бд , подключил компонент dbimage (подключил data source , указал data field — фото).
В базе данных , колонке «фото» присвоил тип данных — поле объекта OLE.
По идее должно всё работать , или же нужен код?



0



Модератор

3488 / 2611 / 741

Регистрация: 19.09.2012

Сообщений: 7,971

03.06.2015, 10:20

11

Так

Цитата
Сообщение от T-Tim
Посмотреть сообщение

В базе данных я указал путь к картинке

или сами картинки хранятся в БД?

Если картинки в формате jpeg, то в DbImage они выводиться не будут — он понимает только bmp. В этом случае надо использовать Image и писать код загрузки.



0



1 / 1 / 0

Регистрация: 24.03.2015

Сообщений: 206

03.06.2015, 10:55

 [ТС]

12

Да , картинки хранятся в БД. Дело в том что я пробовал и jpeg and bmp — безрезультатно!
Мне нужен именно компонент dbimage . База у меня про 10 игроков НБА . Я хочу при переключении на другого игрока , чтоб менялась картинка.



0



Модератор

3488 / 2611 / 741

Регистрация: 19.09.2012

Сообщений: 7,971

03.06.2015, 11:04

13

Цитата
Сообщение от T-Tim
Посмотреть сообщение

Я хочу при переключении на другого игрока , чтоб менялась картинка.

Это можно сделать и через image, меняя картинку в обработчике события ДатаСета OnAfterScroll.



0



1 / 1 / 0

Регистрация: 24.03.2015

Сообщений: 206

03.06.2015, 11:15

 [ТС]

14

Не могли бы скинуть код? или же источник , где я могу его посмотреть.



0



FIL

Модератор

3488 / 2611 / 741

Регистрация: 19.09.2012

Сообщений: 7,971

03.06.2015, 11:25

15

Пример:

Delphi
1
2
3
4
5
6
7
procedure TForm1.ADOQuery1AfterScroll(DataSet: TDataSet);
begin
  if not ADOQuery1.FieldByName('Picture').IsNull then
    Image1.Picture.Assign(ADOQuery1.FieldByName('Picture'))
  else
    Image1.Picture := nil;
end;



0



1 / 1 / 0

Регистрация: 24.03.2015

Сообщений: 206

03.06.2015, 12:46

 [ТС]

16

Извините , я не много не понимаю что с этим кодом делать… Я вписал его в AfterScroll у компонента ADOQuery , а как быть дальше? надо ли что то подключать у компонента image?



0



Модератор

3488 / 2611 / 741

Регистрация: 19.09.2012

Сообщений: 7,971

03.06.2015, 12:49

17

Надо вписать свое имя поля вместо ‘Picture’.
С image ничего делать не надо.



0



1 / 1 / 0

Регистрация: 24.03.2015

Сообщений: 206

03.06.2015, 12:57

 [ТС]

18

Да и ещё , у меня не был подключен adoquery , у меня был подключён компонент adotable , насколько я знаю adoquery — мастер запросов , разве он нужен?



0



Модератор

3488 / 2611 / 741

Регистрация: 19.09.2012

Сообщений: 7,971

03.06.2015, 13:10

19

Цитата
Сообщение от T-Tim
Посмотреть сообщение

разве он нужен?

Я привел лишь пример из своего приложения.
Ты можешь использовать любой ДатаСет (adotable, adoquery и т.д.)



0



1 / 1 / 0

Регистрация: 24.03.2015

Сообщений: 206

03.06.2015, 13:13

 [ТС]

20

Ошибка: bitmap is not valid

После этого кода картинки должны выводиться в image?



0



    msm.ru

    Нравится ресурс?

    Помоги проекту!

    >
    Загрузка изображения из БД «Bitmap is not valid»

    • Подписаться на тему
    • Сообщить другу
    • Скачать/распечатать тему



    Сообщ.
    #1

    ,
    12.08.07, 19:57

      есть таблица и в ней есть 3 поля типа «Поле объекта ОЛЕ»
      в этих полях я буду хранить изображения разного размера

      так вот изображения я помещать прямо в аксесе через CTRL+V
      при этом если я вставляю jpg, то в записи появляется слово «Плакат»
      если вставляю bmp, то в записи появляется «Точечный ричунок»

      и теперь хочу отобразить картинку через DBImage
      выставляю нужный датасорс и выставляю поле картинки (DataField)

      запускаю и выкатывается ошибка «Bitmap is not valid»

      на строчке

      ExpandedWrap disabled

        procedure InvalidGraphic(Str: PResStringRec);

        begin

          raise EInvalidGraphic.CreateRes(Str);

        end;

      модуля Graphics

      что разве DBImage не поддерживает отображение картинок форматов jpg и bmp?
      Или что?


      dron-s



      Сообщ.
      #2

      ,
      13.08.07, 06:59

        а не пробывала считывать через поток картинку из БД?


        Сан Иваныч



        Сообщ.
        #3

        ,
        13.08.07, 07:13

          Оля! Не поленись полазить в ПОИСКЕ — работа с BLOB-полями :yes: И не только в Дельфях, но и в Билдере.


          olga90



          Сообщ.
          #4

          ,
          13.08.07, 13:22

            если успользовать DBCtrlGrid с вкладки DataControls (он мне нужен для отображения по 5 записей из таблицы БД)

            значение ColCount = 1,значение RowCount = 5
            на первой гладкой ячейки этого компонента есть DBLabel, DBMemo и обычный Image

            и при отображении изображений из поля они во всех Имейджах одинаковые :( — ведь это на DB_компонент

            ExpandedWrap disabled

               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;

            и

            ExpandedWrap disabled

              procedure TForm1.FormCreate(Sender: TObject);

              begin

                Image1.Picture.Bitmap.FreeImage;

                LoadPictureFromBLOB(image1.Picture, AdoTable1.FieldByName(‘SMALL_IMAGE’) as TBLOBField);

              end;

            получается что во всех имейджах одинаковые картинки

            как быть тогда

            Прикреплённый файлПрикреплённый файл555.JPG (106.15 Кбайт, скачиваний: 632)


            olga90



            Сообщ.
            #5

            ,
            13.08.07, 13:28

              а если кинуть компонент DBImage и выставить нужное поле, то в дизайн-тайме сразу отображается картинка
              Я обрадовалась но не тут-то было
              При компиляции приложения выскакивает опять «Bitmap is not valid»

              этот компонент недоделанный что-ли :blink:
              или я не то делаю ?

              Прикреплённый файлПрикреплённый файл666.JPG (36.01 Кбайт, скачиваний: 650)

              Guru

              volvo877



              Сообщ.
              #6

              ,
              13.08.07, 14:28

                Оля, посмотри в Королевстве Дельфи, было довольно много обсуждений ошибки «Bitmap image is not valid». В частности — здесь:
                http://www.delphikingdom.com/asp/answer.asp?IDAnswer=15873
                (ну, и по первой ссылке оттуда тоже сходи…)


                dron-s



                Сообщ.
                #7

                ,
                13.08.07, 14:32

                  olga90
                  а ты куда прикрутила свой код вот этот

                  ExpandedWrap disabled

                      Image1.Picture.Bitmap.FreeImage;

                      LoadPictureFromBLOB(image1.Picture, AdoTable1.FieldByName(‘SMALL_IMAGE’) as TBLOBField);

                  на какое событие?


                  olga90



                  Сообщ.
                  #8

                  ,
                  13.08.07, 16:28

                    Цитата dron-s @ 13.08.07, 14:32

                    olga90
                    а ты куда прикрутила свой код вот этот

                    ExpandedWrap disabled

                        Image1.Picture.Bitmap.FreeImage;

                        LoadPictureFromBLOB(image1.Picture, AdoTable1.FieldByName(‘SMALL_IMAGE’) as TBLOBField);

                    я уже писала — на onCreate формы


                    dron-s



                    Сообщ.
                    #9

                    ,
                    13.08.07, 17:29

                      Цитата olga90 @ 13.08.07, 16:28

                      я уже писала — на onCreate формы

                      ну и что ты тогда хочешь от этого кода?
                      у тебя получается что картинка загружается из той позиции, на которой у тебя находится курсор…
                      а после перемещения на следующую позиции у тебя не происходит перезагрузки изображения…
                      это не DBImage которая загружает картинку из той позиции на которой находится курсор… тут надо всё ручками делать :)

                      0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)

                      0 пользователей:

                      • Предыдущая тема
                      • Delphi: Базы данных
                      • Следующая тема

                      Рейтинг@Mail.ru

                      [ Script execution time: 0,0436 ]   [ 16 queries used ]   [ Generated: 28.05.23, 19:57 GMT ]  

                      murad.88

                      Гость


                      Как отобразить в DBImage рисунок находяшийся в  *.mdb (Access)
                      БД имеет  поле ‘Photo’  тип данных ‘Поле объекта OLE’ в это  поле я вставляю BMP, и нужно этот рисунок отобразить в DBImage
                      Зарее Спапасибо Всем !!


                      Записан
                      murad.88

                      Гость


                      Пишу след. код:

                      procedure TForm4.ADOTable1AfterScroll(DataSet: TDataSet);
                      var
                      Bitmap: TBitmap;
                      BS: TADOBlobStream;
                      begin
                      try
                      BS:= TADOBlobStream.Create(DataModule2.ADOTable1.FieldByName(‘Photo’), bmRead);
                      BS.Seek(78, soFromBeginning);
                      Bitmap:= TBitmap.Create;
                      Bitmap.LoadFromStream(BS);
                      DBImage1.Picture.Graphic:= Bitmap;
                      finally
                      Bitmap.Free;
                      BS.Free;
                      end;
                      end;

                      Но вылетает Ошибка:  Incompatible types: ‘TBlobField’ and ‘TField’


                      Записан
                      Oldy

                      Команда клуба

                      ru
                      Offline Offline
                      Пол: Мужской


                      Что в USES?


                      Записан

                      С уважением, Oldy.

                      zubr

                      Гость


                      Ну если используется DBImage, то зачем вообще так делать? Тогда DBImage надо связать с соответствующим полем ‘Photo’. А если уж таким способом делать, то лучше с TImage:

                      Image1.Picture.Assign(TBlobField(DataModule2.ADOTable1.FieldByName(‘Photo’)));

                      « Последнее редактирование: 20-11-2008 10:42 от zubr »
                      Записан
                      murad.88

                      Гость


                      Ну если используется DBImage, то зачем вообще так делать? Тогда DBImage надо связать с соответствующим полем ‘Photo’. А

                      Так когда я связываю с полем Photo в свойствах DBImage то выходит ошибка «bitmap image  is not valid».


                      Записан
                      murad.88

                      Гость


                      Что в USES?

                      uses
                        Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
                        Dialogs, StdCtrls, ExtCtrls, DBCtrls, Buttons, Grids, DBGrids, DB,
                        ComCtrls, TabNotBk, ADODB;


                      Записан
                      zubr

                      Гость


                      murad.88, значит у тебя в БД не битмап (bmp), а возможно какой то другой формат (jpg, gif, png и т. п.). Если это так тогда надо сначала получить имидж в нужном формате, к примеру:

                        If TBlobField(query.FieldByName(‘Photo’)).BlobSize>0 then
                        begin
                         jpg:=TJpegImage.Create;
                         try
                          jpg.Assign(TBlobField(query.FieldByName(‘Photo’)));
                          Image1.Picture.Assign(jpg);
                         finally
                          jpg.Free;
                         end;
                        end;

                      P.S. Извини неправильно код написал в своем предыдущем посте, уже исправил.


                      Записан
                      murad.88

                      Гость


                      Вряд ли там другой формат, если только сам Access не изменил его при загрузки  bmp-шника  в поле Photo
                      Спасибо zubr, твой пример мне пригодился  в другом моменте написания кода !! Улыбаюсь
                      Но я уже разобрался с загрузкой изображения.

                        procedure TForm4.DBImage1Click(Sender: TObject);
                      var
                      Bitmap: TBitmap;
                      BS: TADOBlobStream;
                      begin
                      try
                           BS:= TADOBlobStream.Create(TBlobField(DataModule2.ADOTable1.FieldByName(‘Photo’)), bmRead);
                           BS.Seek(82, soFromBeginning);
                        Bitmap:= TBitmap.Create;
                        Bitmap.LoadFromStream(BS);
                        DBImage1.Picture.Graphic:= Bitmap;
                      finally
                      Bitmap.Free;
                      BS.Free;
                      end;
                      end;

                      Только вот проблема возникла  в DMImage постояyно отображается рисунок первого поля DBGrid.
                      Не знаю на какое событие надо реагировать чтоб в DBImage отображался тот рисунок где находится текущий указатель  компоненте DBGrid.

                      « Последнее редактирование: 21-11-2008 09:53 от murad.88 »
                      Записан
                      zubr

                      Гость


                      murad.88, ты же правильно в предыдущем примере делал — в событии ADOTable1AfterScroll.


                      Записан
                      murad.88

                      Гость


                      ты же правильно в предыдущем примере делал — в событии ADOTable1AfterScroll.

                      Не знаю почему  А черт его знает... но возникала ИС  при ADOTable1AfterScroll, а вот ADOQuery1BeforeScroll все нормально 

                      « Последнее редактирование: 21-11-2008 00:35 от murad.88 »
                      Записан

                      При попытке вставки изображений в БД, методом:

                      ibdsImage.Insert;
                      TBlobField(ibdsImage.FieldByName('IMAGE')).LoadFromFile(OpenDialog1.FileName);
                      ibdsImage.Post;
                      ibtrMain.CommitRetaining;
                      

                      на второй строке, ошибка (за исключением файлов с расширением «bmp»):

                      «exception class EInvalidGraphic with message ‘Bitmap image is not valid’.»

                      Хотя, эти же изображения у меня загружаются и отображаются на convas формы, и компоненте «Image».
                      Библиотеки «GraphicEx», «jpeg» давно подключены.
                      В чем может быть проблема?

                      when I add Jpeg to my Uses section I get the following error:

                      Error (0): WARNING. Duplicate resource(s).
                      ERror (0): Type 10 (RCDATA), ID TFORM1:.

                      Error (0): File Unit1.DFM resource kept; file jpeg.DFM resource discarded.

                      —— code ———-

                      unit Unit1;

                      interface

                      uses
                        Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
                        StdCtrls, ExtCtrls, Jpeg;

                      type
                        TForm1 = class(TForm)
                          Image1: TImage;
                          Button1: TButton;
                          procedure FormCreate(Sender: TObject);
                          procedure Button1Click(Sender: TObject);
                          procedure FormClose(Sender: TObject; var Action: TCloseAction);
                        private
                          { Private declarations }
                        public
                          { Public declarations }
                        end;

                      var
                        Form1: TForm1;
                      var
                      Bitmap : TBitmap;

                      implementation

                      {$R *.DFM}

                      procedure TForm1.FormCreate(Sender: TObject);
                      begin
                      Bitmap := TBitmap.Create;
                      end;

                      procedure TForm1.Button1Click(Sender: TObject);
                      begin
                      With Image1 do begin
                      Bitmap.LoadFromFile(‘d:homepageblueline.jpg’);
                      Picture.Bitmap := Bitmap;
                      end;
                      end;

                      procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
                      begin
                      Bitmap.Free;
                      end;

                      end.

                      Понравилась статья? Поделить с друзьями:
                    • Как найти площадь треугольника зная два угла
                    • Как найти параметры электрической цепи
                    • Как найти ссылку на соц сеть
                    • Как найти клиентов архитектору
                    • Marvel ultimate alliance 2 0xe06d7363 как исправить