Модераторы: Snowy, Alexeis, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как рисовать на TImage, с GIFкой в нем 
:(
    Опции темы
wesadex
Дата 26.12.2005, 15:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 83
Регистрация: 21.6.2005

Репутация: нет
Всего: нет



Есть TImage, в котором загружена GIFка... при попытке рисовать на канве этого TImage вываливается EInvalidOperation дескать "Рисовать на канве можно только если Image содержит Bitmap"... Что-то ничего не нашел по данному вопросу, подскажите люди добрые, как реализуется сие простое действо (или не простое?)! smile
PM MAIL   Вверх
wesadex
Дата 26.12.2005, 16:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 83
Регистрация: 21.6.2005

Репутация: нет
Всего: нет



EInvalidOperation: "Can only modify an image if it contains a bitmap" вызывает следующий код:
Код

unit frmMain;

interface

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

type
  TmainForm = class(TForm)
    Memo: TMemo;
    Button1: TButton;
    Button2: TButton;
    Image: TImage;
    OpenDialog: TOpenDialog;
    Button3: TButton;
    SaveDialog: TSaveDialog;
    ScrollBox: TScrollBox;
    ListBox: TListBox;
    procedure ImageMouseDown(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);

   ...

  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  mainForm: TmainForm;
  StartPt:TPoint;

implementation

{$R *.dfm}

procedure TmainForm.ImageMouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
  StartPt.X:=x;
  StartPt.y:=y;
  
  Image.Canvas.Rectangle(x,y,x+20,y+20); //Строка вызывающая исключение

end;

....

end.


Я видимо не дословный перевод сообщения привел, а зря... т.е. видимо оно жалуется на то, что Image не содердит Bitmap'ов... хотя картинка в него уже загружена!
Как думаете господа из-за чего этот траббл?

Это сообщение отредактировал(а) wesadex - 26.12.2005, 16:14
PM MAIL   Вверх
Snowy
Дата 26.12.2005, 16:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 11363
Регистрация: 13.10.2004
Где: Питер

Репутация: 18
Всего: 484



Ну вот пример для jpeg'a:
Код

procedure TForm1.FormCreate(Sender: TObject);
var
  jpg: TJpegImage;
begin
  jpg:=TJpegImage.Create;
  jpg.LoadFromFile('C:\1.jpg');
  jpg.DIBNeeded;
  Image1.Picture.Bitmap.Assign(jpg);
  jpg.Free;
end;

PM MAIL   Вверх
wesadex
Дата 26.12.2005, 16:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 83
Регистрация: 21.6.2005

Репутация: нет
Всего: нет



У меня гифы да и хочется понять суть проблемы... Картинка грузится в Image вот так:
Image.Picture.LoadFromFile(FileName);... очень не хочется утяжелять прогу разбором того, какой формат картинки грузим и индивидуальным способом загрузки - прога-то мелкая...
PM MAIL   Вверх
Snowy
Дата 26.12.2005, 17:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 11363
Регистрация: 13.10.2004
Где: Питер

Репутация: 18
Всего: 484



Код

var
  bmp: TBitmap;
begin
  Image1.Picture.LoadFromFile('С:\1.jpg');
  bmp:=TBitmap.Create;
  bmp.Assign(Image1.Picture.Graphic);
  Image1.Picture.Bitmap.Assign(bmp);
  bmp.Free;
end;

PM MAIL   Вверх
wesadex
Дата 27.12.2005, 10:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 83
Регистрация: 21.6.2005

Репутация: нет
Всего: нет



Спасибо - подходит для всех форматов, которые мне нужны - для Веб-изображений! smile
А все-таки кто-нибудь может объяснить почему вылезала эта ошибка?
PM MAIL   Вверх
Snowy
Дата 27.12.2005, 10:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 11363
Регистрация: 13.10.2004
Где: Питер

Репутация: 18
Всего: 484



Ошибка вылезала, потому что изображение не было преобразовано в BitMap, а работало через адаптер.
Битмап по сути был пустой. Вообще не задействован.
В этом решении я беру изображение, созданое адаптером, кладу его в битмап.
А потом этот битмап назначаю обратно TImage.
В результате TImage отключает адаптер и работает как обычно напрямую с битмапом.
PM MAIL   Вверх
wesadex
Дата 27.12.2005, 14:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 83
Регистрация: 21.6.2005

Репутация: нет
Всего: нет



Осознал, но вот что не укладывается в схему на мой взгляд: Пустой битмап может быть и тогда когда Image просто положили на форму, но в этой ситуации Image позволяется работать в канвой... или я просто чего-то не понимаю?
PM MAIL   Вверх
Snowy
Дата 27.12.2005, 14:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 11363
Регистрация: 13.10.2004
Где: Питер

Репутация: 18
Всего: 484



Просто при работе с адаптером, имадж переключается на него, а битмап игнорирует.
Попытка рисовать на канве имаджа заканчивается неуспехом,
т.к. битмап недоступен - отображается информация адаптера, а она ридонли.
Можно попробовать рисовать на канве битмапа.
В данном случае, я думаю, адаптер просто отключится, картинка пропадет и активируется битмап.
PM MAIL   Вверх
wesadex
Дата 28.12.2005, 11:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 83
Регистрация: 21.6.2005

Репутация: нет
Всего: нет



Так и было - пробовал пользовать Image1.Picture.Bitmap.Canvas - картинка пропадала, а на канве появлялся рисунок! Спасибо! smile
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Звук, графика и видео"
Girder
Snowy
Alexeis

Запрещено:

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делится вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи
  • По вопросам разработки игр стоит заглянуть сюда

FAQ раздела лежит здесь!


Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Girder, Snowy.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Звук, графика и видео | Следующая тема »


 




[ Время генерации скрипта: 0.0587 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.