Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.06.13;
Скачать: CL | DM;

Вниз

DelphiX, TPictureCollectionItem, TPicture и TCanvas   Найти похожие ветки 

 
Delphi_X_akep   (2004-02-17 16:44) [0]

DelphiX. Есть переменная класса TImageSprite и в ней картинка.
Можно ли нарисовать на этой картинке что нибудь (изменить ее),
используя TCanvas? При использовании этого кода:
 Sprite.Image.Picture.Bitmap.Canvas.LineTo(10,10);
картинка становится пустой.
И вообще возможно ли изменять картинку в программе,
находящуюся в классе TPicture (Рисовать линии, точки и т. п.)?


 
jab~   (2004-02-17 16:57) [1]

Я думаю можно рисовать... Для этого есть функция BitBlt()

BOOL BitBlt(

   HDC hdcDest, // handle to destination device context
   int nXDest, // x-coordinate of destination rectangle"s upper-left corner
   int nYDest, // y-coordinate of destination rectangle"s upper-left corner
   int nWidth, // width of destination rectangle
   int nHeight, // height of destination rectangle
   HDC hdcSrc, // handle to source device context
   int nXSrc, // x-coordinate of source rectangle"s upper-left corner  
   int nYSrc, // y-coordinate of source rectangle"s upper-left corner
   DWORD dwRop  // raster operation code
  );

Типа из одной картинки рисует на другой...
Вот кусочик того как я использовал эту функцию у себя:
BitBlt(b2.Canvas.Handle,0,0,w,h,Form1.Canvas.Handle,MonthCalendar1.Left,MonthCalendar1.Top+30,SRCCOPY);

где
 b2:TBitmap;
w,h:Integer;
Тоесть я с канваса формы где у меня расположен календарь, снимал изображение и помещал его в битмап. Код проверен на 100% работоспособен.
Наверно так с имыдж листами можно (не пробовал).


 
m-AAA-d ©   (2004-02-17 16:59) [2]

вот пример того как я на Image: TPictureCollectionItem рисовал картинку.

var rsrc, rdst: TRect;

... // Заполняем rdst и rsrc нужными нам значениями

FDXImageList.Items[FDXImageList.Items.Count-1].
 Picture.Bitmap.Canvas.CopyRect(rdst,
 FDXImageList.Items.Find("Fonts").Picture.Bitmap.Canvas,
 rsrc);


 
Delphi_X_akep   (2004-02-17 18:10) [3]

Нет, ну я вот например хочу поверх картинки в
ImageList нарисовать другую, в TBitmap;
Вот код:

var
  c : TBitmap;
  rsrc, rdst: TRect;
begin
  c := TBitmap.Create;
  c.LoadFromFile("c:\file.bmp");

  rdst := rect(1,1,1,1);
  rsrc := rect(1,1,1,1);
 
  ImageList.Items.Find("pic1").Picture.Bitmap.
     Canvas.CopyRect(rdst, c.Canvas,rsrc);
  c.free;


Но картинка в ImageList опять становиться пустой.


 
m-AAA-d ©   (2004-02-18 15:50) [4]

значит так, попробуй следующее:
- после c.free добавь ImageList.Items ... Bitmap.SaveToFile("name.bmp"); и посмотри сохраненный рисунок - это для контроля действий
- а второе что мне кажется более вероятным: когда ты указываешь параметры для rsrc и rdst - это же в пикселях, то есть у тебя получается копирование всего одного пикселя. неудивительно что не заметно. :)



Страницы: 1 вся ветка

Текущий архив: 2004.06.13;
Скачать: CL | DM;

Наверх




Память: 0.47 MB
Время: 0.024 c
1-1086178769
Ivolg
2004-06-02 16:19
2004.06.13
Пиктограмма


14-1085900129
YurikGl
2004-05-30 10:55
2004.06.13
Славянофилам - посвящается


6-1082666029
andrysha1
2004-04-23 00:33
2004.06.13
почему когда я использую IdUDPClient, IdUDPServer,IdTCPServer


14-1085338160
gg
2004-05-23 22:49
2004.06.13
Чтобы скомпилить компонент нужно proxies.pas


4-1084034112
Sur
2004-05-08 20:35
2004.06.13
Окно на чистом API.