Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Media";
Текущий архив: 2010.10.03;
Скачать: [xml.tar.bz2];

Вниз

Проблемма с GDI+   Найти похожие ветки 

 
unknowing   (2008-03-15 09:32) [0]

Всем привет! Вот код класса (примерно):

uses
Windows,GDIPAPI,GDIPOBJ;
type
TGyroHorizon = class(TObject)
private
 graphics : TGPGraphics;
 Bitmap : TGpBitmap;
 MplayBack : TGPGraphics;
 cBitmap: TGPCachedBitmap;
 Pen: TGPPen;

// protected

public

constructor Create (AOwner: TObject; Playback : HDC);
destructor  Destroy; override;
procedure View();

end;

implementation

constructor TGyroHorizon. Create (AOwner: TObject; Playback : HDC);
begin
 Bitmap:= TGpBitmap.Create(100 ,100 ,2498570);
 graphics := TGPGraphics.Create(Bitmap);
 graphics.Clear(aclBlack);
 MplayBack :=TGPGraphics.Create(Playback);
 Pen := TGPPen.Create(aclWhite);
 View(20);
  inherited Create;
end;

destructor  TGyroHorizon.Destroy;
begin
 Pen.Free;
 graphics.Free;
 MplayBack.Free;
 Bitmap.Free;
inherited Destroy;
end;

procedure TGyroHorizon.View(R : integer);
begin

cBitmap:= TGPCachedBitmap.Create(bitmap,MplayBack);
graphics.DrawEllipse(Pen, 10, 20, R, R);
MplayBack.DrawCachedBitmap(cBitmap, 0, 0);
cBitmap.Free;
end;
Вызываю конструктор GyroHorizon. Create в событии OnCreate основной формы.
При вызове GyroHorizon.View ничего не происходит..:) Где ошибка? Куда девался DC?


 
JohnJ   (2008-03-19 00:57) [1]

У меня похожая проблема:
Когда делаю прорисовку как в примерах (в PaintBox), то всё рисуется, но хочется всё это рисовать на собственный Bitmap:
procedure TForm1.FormDestroy(Sender: TObject);
begin
 Bitmap.Free;
end;

procedure TForm1.Image1Click(Sender: TObject);
begin
 with Image1.Picture.Bitmap do
  begin
    Width := Bitmap.Width;
    Height := Bitmap.Height;
    Canvas.CopyRect(Canvas.ClipRect, Bitmap.Canvas, Bitmap.Canvas.ClipRect);
  end;
end;

procedure TForm1.FormCreate(Sender: TObject);
var i: integer;
    FN: string;
    Y: integer;
begin
 Bitmap := TBitmap.Create;
 Bitmap.Width := PaintBox1.Width;
 Bitmap.Height := PaintBox1.Height;
 GDIPlusInstr := TGDIP.Create(Bitmap.Handle);
 GDIPlusInstr.Clear(GDIPlusInstr.ARGBColor(255, 236, 233, 216));
 for i := Low(Instr) to High(Instr) do
  begin
    FN := ExtractFilePath(Application.ExeName) + "pics\"+Instr[i];
    Y := Y0 + (W_INSTR + 2 * (S_INSTR + R_INSTR)) * i;
    if FileExists(FN) then
     GDIPlusInstr.DrawImageFile(FN, X0, Y, W_INSTR, W_INSTR);
    GDIPlusInstr.DrawRect(X0 - S_INSTR, Y - S_INSTR, W_INSTR + 2 * S_INSTR, W_INSTR + 2 * S_INSTR, R_INSTR, GDIPlusInstr.ARGBColor(255, 236, 233, 216));
  end;
 Y := Y0 + (W_INSTR + 2 * (S_INSTR + R_INSTR)) * CurInstr;
 GDIPlusInstr.DrawRect(X0 - S_INSTR, Y - S_INSTR, W_INSTR + 2 * S_INSTR, W_INSTR + 2 * S_INSTR, R_INSTR, GDIPlusInstr.ARGBColor(255, 128, 128, 200));
 GDIPlusInstr.Free;
end;

В результате после клика на Image1 появляется белый прямоугльник, с размерами PaintBox, но в нём ничего нет, как-будто в Bitmap ничего не рисовалось, подскажите пожалуйста как справиться с этой проблемой.


 
JohnJ   (2008-03-19 00:59) [2]

забыл добавить что GDIPlusInstr это объект класса, производного от TGPGraphics и не делает ничего особо нового (повторю, что в PaintBox всё работает).


 
JohnJ   (2008-03-19 22:27) [3]

усё, разобрался ) ошибка в строке
GDIPlusInstr := TGDIP.Create(Bitmap.Handle);
надо передавать хэндл на канвас
GDIPlusInstr := TGDIP.Create(Bitmap.Canvas.Handle); - так работает


 
unknowing   (2008-03-19 22:49) [4]


> JohnJ   (19.03.08 22:27) [3]

Я передаю хэндл на канвас и у меня не работает...


 
Кузан Дмитрий   (2008-03-24 09:47) [5]

Так как указатель на объект и указатель на канву - это разные вещи , хотя и обы представлены указателем, то путать их не надо.


 
Кузан Дмитрий   (2008-03-24 09:48) [6]

Так как указатель на объект и указатель на канву - это разные вещи , хотя и обы представлены указателем, то путать их не надо.


 
Кузан Дмитрий   (2008-03-24 09:48) [7]

Так как указатель на объект и указатель на канву - это разные вещи , хотя и обы представлены указателем, то путать их не надо.



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

Форум: "Media";
Текущий архив: 2010.10.03;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.47 MB
Время: 0.003 c
2-1278433099
Delphist2
2010-07-06 20:18
2010.10.03
полупрозрачность


10-1168354475
Priest
2007-01-09 17:54
2010.10.03
LoadPackage в COM сервере


15-1278301990
@!!ex
2010-07-05 07:53
2010.10.03
Американцы превратили водопад в 3D-экран


15-1278107209
Petr V. Abramov
2010-07-03 01:46
2010.10.03
приходтися обращться к о спецам по всем вопросам (:


2-1278941491
JohnKorsh
2010-07-12 17:31
2010.10.03
Альбомная ориентация листа при печати.





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский