Вниз
Скачать: CL | DM;

TBitmap не хочет сохранять картинку   Найти похожие ветки 

← →
acp ©   (2003-05-26 23:32) [0]

Точнее сохраняет, но не совсем то. А именно, сохраняется простой чёрный фон. Может кто что подскажет? Тыкнет носом в ошибку?

TmpBMP := NewBitmap(100, 100);
with SrcRect do
begin
Left := 10;
Top := 10;
Right := 50;
Bottom := 50;
end;

//TmpBMP.Canvas.ModeCopy := cmSrcCopy;
TmpBMP.Canvas.CopyRect(SrcRect, LBMP.Canvas, SrcRect);
TmpBMP.SaveToFile(FileName);

PS: код по моему, достаточно ясный. В VCL аналогичное работает. Посмотрел реализацию CopyRect, вроде всё нормально...


← →
puky   (2003-05-26 23:59) [1]

Выставь pixelformat.
Вот рабочий пример:

procedure TForm1.Button1Click(Sender: PObj);
var
tmpbmp : PBitmap;
SrcRect : TRect;
begin
tmpbmp := NewDIBBitmap( 100, 100, pf24bit );
with tmpbmp^ do begin
SrcRect := MakeRect( 0, 0, 100, 400 );
Canvas.CopyRect( SrcRect, Form.Canvas, SrcRect );
( "c:\1.bmp" ) [1]
Выставь pixelformat.
Вот рабочий пример:

procedure TForm1.Button1Click(Sender: PObj);
var
tmpbmp : PBitmap;
SrcRect : TRect;
begin
tmpbmp := NewDIBBitmap( 100, 100, pf24bit );
with tmpbmp^ do begin
SrcRect := MakeRect( 0, 0, 100, 400 );
Canvas.CopyRect( SrcRect, Form.Canvas, SrcRect );
SaveToFile( "c:\1.bmp" );
Free;
end;
end;


← →
acp ©   (2003-05-27 00:14) [2]

Да... Может быть это и работает. В принципе, не суть важно. Для меня важнее вопрос - _почему_ не работает, почему выставление BPP решает эту проблема?


← →
Кладов   (2003-05-28 22:43) [3]

Причину нашел. Точнее, нашел, как исправить. Вот код NewBitmap.

function NewBitmap( W, H: Integer ): PBitmap;
var DC: HDC;
begin
New( Result, Create );
Result.fHandleType := bmDDB;
Result.fDetachCanvas := DummyDetachCanvas;
Result.fWidth := W;
Result.fHeight := H;
if (W <> 0) and (H <> 0) then
begin
//DC := CreateCompatibleDC( 0 );
DC := GetDC( 0 );
Result.fHandle := CreateCompatibleBitmap( DC, W, H );
Assert( Result.fHandle <> 0, "Can not create bitmap handle" );
//DeleteDC( DC );
( 0, DC ) [3]
Причину нашел. Точнее, нашел, как исправить. Вот код NewBitmap.

function NewBitmap( W, H: Integer ): PBitmap;
var DC: HDC;
begin
New( Result, Create );
Result.fHandleType := bmDDB;
Result.fDetachCanvas := DummyDetachCanvas;
Result.fWidth := W;
Result.fHeight := H;
if (W <> 0) and (H <> 0) then
begin
//DC := CreateCompatibleDC( 0 );
DC := GetDC( 0 );
Result.fHandle := CreateCompatibleBitmap( DC, W, H );
Assert( Result.fHandle <> 0, "Can not create bitmap handle" );
//DeleteDC( DC );
ReleaseDC( 0, DC );
end;
end;


Закомментаренные строки заменены жирными. Теперь бы еще найти причину, почему так правильно, а так, как было, давало монохромный битмап :)



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

Скачать: CL | DM;



Память: 0.46 MB
Время: 0.013 c
1-29458
sergg
2004-01-30 10:21
2004.02.10
Приложение требует qtintf70.dll


3-29280
Евген
2004-01-09 12:16
2004.02.10
Проблема с IBDataSet


3-29226
raul
2004-01-19 18:20
2004.02.10
BDE API


1-29340
_юзер_
2004-01-29 14:31
2004.02.10
COM


3-29245
Карелин Артем
2004-01-19 11:25
2004.02.10
Как представить дату в FireBird в виде числа?




   Наверх