5 / 5 / 0
Регистрация: 04.03.2015
Сообщений: 71
1

Создать объект типа Picture с использованием картинки из ресурсов / преобразовать тип Image к Picture

10.04.2016, 19:20. Показов 6548. Ответов 7
Метки нет (Все метки)

Здравствуйте. Нашел пост о том, как добавлять картинки в ресурсы программы,но не смог разобраться в том, как создавать объекты типа Picture из этих картинок. В конструкторе можно загружать картинки только из файла, а работать напрямую с потоками пока не умею
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
10.04.2016, 19:20
Ответы с готовыми решениями:

Поворот картинки типа picture в GraphABC
Задача следующая: uses GraphABC; var SpaceShip: picture; //Текстуры procedure...

Очистка Image.Picture
Как очистить компонент Image от картинки что біла уже туда занесена?

Image.Picture.LoadFromFile
Подскажите, у меня в GetLogo прописано \images\123.bmp путь к фото, раньше все работало, но сейчас...

Как запретить заход одного объекта (picture box) на другой picture box
Создаю платформер на Windows Forms, как запретить заход одного picture box'a на другой?

7
22 / 22 / 13
Регистрация: 05.09.2015
Сообщений: 142
10.04.2016, 20:07 2
Picture в GraphABC? Если так, то никак преобразовать Image к Picture не получиться.
0
5 / 5 / 0
Регистрация: 04.03.2015
Сообщений: 71
11.04.2016, 09:32  [ТС] 3
Ну должно же быть разумное некостыльное решение
0
20 / 20 / 16
Регистрация: 21.01.2015
Сообщений: 51
11.04.2016, 09:40 4
В исходник библиотеки GraphABC я, лично, добавил подчеркнутые строки:
Pascal
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
constructor Picture.Create(fname: string; [U] rm: ReadMethod[/U]);
var
  tmp: Image;
  fs: System.IO.FileStream;
begin
  try
    [U]if rm = Stream Then
      tmp := Image.FromStream(GetResourceStream(fname))[/U]
    else begin
      fs := new System.IO.FileStream(fname, System.IO.FileMode.Open);
      tmp := Image.FromStream(fs);
    end;
    bmp := new Bitmap(tmp);
    if rm = Files Then
    begin
      fs.Flush;
      fs.Close;
    end;
    tmp.Dispose;
  except on ex: System.ArgumentException do
    raise new System.IO.FileNotFoundException(string.Format(FILE_NOT_FOUND_MESSAGE,fname));
  end;
   
  gb := Graphics.FromImage(bmp);  //!!!
  transpcolor := bmp.GetPixel(0,bmp.Height-1);
  istransp := false;
  savedbmp := nil;
end;
Может быть, из этого можно придумать что-то более универсальное, но мне и такой реализации для начала было достаточно.
0
147 / 128 / 155
Регистрация: 22.03.2016
Сообщений: 502
11.04.2016, 10:40 5
Используйте system.drawing.dll
Там с графикой таких проблем нет)

Мною не проверялось:
Ну а так я думаю можно поменять спецификатор доступа:
Pascal
1
2
  private
    bmp,savedbmp: Bitmap;
на
Pascal
1
public
и подменить изображения после инициализации класса в теле основной программы.
0
5 / 5 / 0
Регистрация: 04.03.2015
Сообщений: 71
11.04.2016, 11:51  [ТС] 6
А что за тип ReadMethod такой?
0
10 / 10 / 11
Регистрация: 28.12.2015
Сообщений: 161
19.04.2016, 12:53 7
Лучший ответ Сообщение было отмечено MSha как решение

Решение

Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
{$resource 'Векторная.jpg'}//эта строка говорит компилятору что эту картинку тоже надо компелировать;
//После компеляции картинка будет внутри exe файла;
uses GraphABC,System.Drawing;
//Чтобы обратится к этой картинке в коде программы потребуется переменная типа Bitmap;
//Тип Bitmap есть в модуле System.Drawing;
var bm:Bitmap;
begin
// Cоздаёт картинку из ресурса программы и присваивает её переменной bm;
bm:= new bitmap(image.FromStream(GetResourceStream('Векторная.jpg')));//Пользуемся картинкой!!!
//GraphWindowGraphics.DrawImage(bm,0,0); //так можно вывести картинку (Bitmap) на экран;
//--------------------------------------------------------------------------------------
//В GraphABC Bitmap почти нигде не используется, значит далее создаём переменную (Picture);
var p:Picture;
//Обычного конструктора по созданию Picture из Bitmap нету, придётся использовать инструменты у Picture;
//Для этого создаём пустую p(Picture) с размерами bm(Bitmap);
p:= new Picture(bm.Width,bm.Height);
//Помещаем в неё картинку копированную из bm(Bitmap);
p.CopyRect(new System.Drawing.Rectangle(0,0,p.Width,p.Height),bm,new System.Drawing.Rectangle(0,0,p.Width,p.Height));
p.Draw;//Пользуемся картинкой!!!
end.
0
5 / 5 / 0
Регистрация: 04.03.2015
Сообщений: 71
20.04.2016, 20:12  [ТС] 8
Спасибо
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
20.04.2016, 20:12
Помогаю со студенческими работами здесь

Можно ли динамически создавать Picture Box внутри другого Picture Box?
Можно ли динамически создавать Picture Box внутри другого Picture Box. Если можно то как? Заранее...

Picture Control, смена различных изображений из ресурсов
Здавствуйте,у меня вопрос такой- есть в диалоге mfc элемент управления Picture Control,в свойствах...

Как загрузить изображение из ресурсов проекта в picture box?
Как загрузить изображение из ресурсов проекта в picture box? Picture box создавался в коде.

Как рисовать на объектах image или picture
как рисовать на объектах image или picture??!! например мне нужно нарисовать линию на объекте...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2023, CyberForum.ru