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

Вниз

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 вся ветка

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

Наверх





Память: 0.45 MB
Время: 0.009 c
3-29259
Burafchick
2004-01-18 13:02
2004.02.10
как указать относительный путь к папке базы данных


8-29483
Семен
2003-10-08 10:31
2004.02.10
Помогите найти мультимедийные компоненты MMtools


7-29625
kast
2003-11-25 12:09
2004.02.10
opc-client


1-29358
axx
2004-01-29 12:37
2004.02.10
Помогите с преобразованием в массива в строку :-)


9-29185
Gandalv
2003-07-26 11:17
2004.02.10
Лучший формат





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский