Перейти к содержанию
Fire Monkey от А до Я
  • 0

У меня не работает DrawBitmap


Steepe_Hare

Вопрос

Рисует черный квадрат, а битмап не виден(

    if OpenDialog1.Execute then
    begin
      MyBitmap := TBitmap.CreateFromFile(OpenDialog1.Files[0]);
      MyRect := TRectF.Create(50, 30, 65, 45);
      Image1.Bitmap.Canvas.BeginScene;
      Image1.Bitmap.Canvas.DrawBitmap(MyBitmap, MyRect, MyRect, 1);
      Image1.Bitmap.Canvas.EndScene;
      MyBitmap.Free;
    end;

 

Изменено пользователем Steepe_Hare
Ссылка на комментарий

Рекомендуемые сообщения

  • 0
18 минут назад, Alexander сказал:

Проверьте, что загружается в MyBitmap. Например, через savetofile. Или весь Image1 чёрный? 

Ошибку дает при сохранении:

---------------------------
Debugger Exception Notification
---------------------------
Project Project1.exe raised exception class EBitmapSavingFailed with message 'Saving bitmap failed.'.
---------------------------
Break   Continue   Help   
---------------------------

 

Ссылка на комментарий
  • 0

Добрый день!

Image1.Bitmap

Скорее всего он у вас имеет нулевые размеры, попробуйте перед 

Image1.Bitmap.Canvas.BeginScene;

указать Image1.Bitmap.SetSize(X,Y);

Ссылка на комментарий
  • 0
20 минут назад, Кривяков Виталий сказал:

Добрый день!


Image1.Bitmap

Скорее всего он у вас имеет нулевые размеры, попробуйте перед 


Image1.Bitmap.Canvas.BeginScene;

указать Image1.Bitmap.SetSize(X,Y);

Не помогло. Такое ощущение, что MyBitmap не все bmp-файлы принимает

Ссылка на комментарий
  • 0
  • Администраторы

В следующий раз, просто прикрепите проект, с минимальным кодом для воспроизведения проблемы. Это сэкономит кучу времени и скорее всего сразу даст вам ответ.

Ссылка на комментарий
  • 0
32 минуты назад, Кривяков Виталий сказал:

Если битмап не секретный, то выложите его сюда.

Вот он, 70 на 70 (в zip-файле)

    if OpenDialog1.Execute then
    begin
      // Image1.Bitmap.SetSize(Round(Image1.Width), Round(Image1.Height));
      MyBitmap := TBitmap.CreateFromFile(OpenDialog1.Files[0]);
      MyRect := TRectF.Create(50, 30, 120, 100);
      Image1.Bitmap.Canvas.BeginScene;
      Image1.Bitmap.Canvas.DrawBitmap(MyBitmap, MyRect, MyRect, 1);
      Image1.Bitmap.Canvas.EndScene;
      MyBitmap.Free;
    end;

 

 

golub.zip

Ссылка на комментарий
  • 0
  • Администраторы

Я вам в предыдущей ветке отвечал про Image.Bitmap. А вы продолжаете делать ту же самую ошибку.

 

Ссылка на комментарий
  • 0
20 минут назад, Brovin Yaroslav сказал:

Я вам в предыдущей ветке отвечал про Image.Bitmap. А вы продолжаете делать ту же самую ошибку.

 

Так теперь у меня Image1.Bitmap не пустой, в него загружена в дизайн-тайме картинка (фон). Но DrawBitmap не рисует голубя из bmp-файла, то есть рисует, но некорректно

Ссылка на комментарий
  • 0
  • Администраторы

Все ясно. У вас ошибка. Посмотрите внимательно на параметры функции Canvas.DrawBitmap.

  • Первый прямоугольник - это область из битмапа, которую вы будите рисовать.
  • Второй прямоугольник - это область на канве, куда вы будите выводить часть битмапа.

Вот так будет правильно:

Image1.Bitmap.Canvas.DrawBitmap(MyBitmap, MyBitmap.BoundsF, MyRect, 1);

P.S. В следующие такие вопросы обязательно прикрепляйте ваш проект. Это сэкономит кучу времени на ненужные вопросы.

Ссылка на комментарий
  • 0
3 часа назад, Brovin Yaroslav сказал:

Все ясно. У вас ошибка. Посмотрите внимательно на параметры функции Canvas.DrawBitmap.

  • Первый прямоугольник - это область из битмапа, которую вы будите рисовать.
  • Второй прямоугольник - это область на канве, куда вы будите выводить часть битмапа.

Вот так будет правильно:


Image1.Bitmap.Canvas.DrawBitmap(MyBitmap, MyBitmap.BoundsF, MyRect, 1);

P.S. В следующие такие вопросы обязательно прикрепляйте ваш проект. Это сэкономит кучу времени на ненужные вопросы.

 

Спасибо за ответ. А почему картинка с голубем получается вытянутой по высоте?

procedure TForm1.Button1Click(Sender: TObject);
var
  MyBitmap: TBitmap;
  MyRect: TRectF;
begin
  if OpenDialog1.Execute then
  begin
    MyBitmap := TBitmap.CreateFromFile(OpenDialog1.Files[0]);
    MyRect := TRectF.Create(TPointF.Create(100, 100),
      TPointF.Create(100 + MyBitmap.Width, 100 + MyBitmap.Height));

    Image1.Bitmap.Canvas.BeginScene;

    Image1.Bitmap.Canvas.DrawBitmap(MyBitmap, MyBitmap.BoundsF, MyRect, 1);

    Image1.Bitmap.Canvas.EndScene;
    MyBitmap.Free;

  end;
end;

 

 

Изменено пользователем Steepe_Hare
Ссылка на комментарий
  • 0
  • Администраторы

Бывает полезно залезть в справку и почитать, что делает тот или иной метод: FMX.Graphics.TCanvas.DrawBitmap

 

Ссылка на комментарий
  • 0
16 минут назад, Brovin Yaroslav сказал:

Бывает полезно залезть в справку и почитать, что делает тот или иной метод: FMX.Graphics.TCanvas.DrawBitmap

 

Я справку не покидаю в последнее время, если честно.  Мне хотелось бы, чтобы DrawBitmap вывел на канвасе картинку такой, какая она есть, без scale и без вытягивания. Это возможно?

Ссылка на комментарий
  • 0
  • Администраторы
5 минут назад, Steepe_Hare сказал:

Я справку не покидаю в последнее время, если честно.  Мне хотелось бы, чтобы DrawBitmap вывел на канвасе картинку такой, какая она есть, без scale и без вытягивания. Это возможно?

Наверное, нужно указать такие размеры, чтобы SrcRect и DstRect имели одинаковые размеры ;-)

Ссылка на комментарий
  • 0
14 минут назад, Brovin Yaroslav сказал:

Наверное, нужно указать такие размеры, чтобы SrcRect и DstRect имели одинаковые размеры ;-)

Я и пытаюсь так :)

Разве MyBitmap.BoundsF и MyRect := TRectF.Create(TPointF.Create(100, 100), TPointF.Create(100 + MyBitmap.Width, 100 + MyBitmap.Height)) имеют разные размеры?

Ссылка на комментарий

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить на вопрос...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...