Тестовый пример - вычитываю во временый битмап картинку из файла. Потом временный битмап рисую на полотне битмапа от Image1. Потом еще рисую на полотне, например эллипс. На этом этапе все хорошо.
А дальше достаточно сделать Image1.Bitmap.Map - Unmap, и все, изображение пустое. Если писать через BitmapData напрямую в пикселы - оно показывается на экране.
При этом каким-то странным образом эффект стирания битмапа убирается путем вызова Image1.Bitmap.SaveToFile перед вызовом Map-Unmap,
Исходники пытался читать, причины не нашел.
Кто в курсе, подскажите - что я делаю не так?
P.S. Если читать из файла напрямую в Image1.Bitmap - то при Map-Unmap затираются только изменения полотна, а загруженный рисунок остается. Явно какие-то недокументированные особенности вызова Map-Unmap..
P.P.S. Зло где-то в районе вызова
if H.FAccess in [TMapAccess.ReadWrite, TMapAccess.Write] then
SharedDevice.CopyResource(H.Texture, H.FMapBuffer);
при Unmap.
Осталось придумать, как это побороть и совместить рисование на полотне с прямым доступом к пикселам.
procedure TForm2.Button1Click(Sender: TObject);
var Bmp1 : Tbitmap;
BitmapData : TBitmapData;
begin
Bmp1 := Tbitmap.Create;
Bmp1.CreateFromFile('c:\123.bmp');
Image1.Bitmap.Width := Bmp1.Width;
Image1.Bitmap.Height := Bmp1.Height;
Image1.Bitmap.Canvas.BeginScene;
Image1.Bitmap.Canvas.DrawBitmap(Bmp1,TRectF.Create(0,0,Bmp1.Width,Bmp1.Height),
TRectF.Create(0,0,Image1.Bitmap.Width,Image1.Bitmap.Height), 1);
Image1.Bitmap.Canvas.Stroke.Color := TAlphaColorRec.Red;
Image1.Bitmap.Canvas.DrawEllipse(TRectF.Create(10, 10,
20,20), 1);
Image1.Bitmap.Canvas.EndScene;
// Image1.Bitmap.SaveToFile('c:\0001.bmp'); //если это закомментировать, то
//при вызове Map-Unmap в Image будет пусто
Image1.Bitmap.Map(TMapAccess.Write,BitmapData);
// здесь была работа с пикселами напрямую - замена цветов в нескольких точках.
Image1.Bitmap.Unmap(BitmapData);
Bmp1.Free;
// BMPTest(Image1.Bitmap);
end;
Вопрос
Vizit0r
Тестовый пример - вычитываю во временый битмап картинку из файла. Потом временный битмап рисую на полотне битмапа от Image1. Потом еще рисую на полотне, например эллипс. На этом этапе все хорошо.
А дальше достаточно сделать Image1.Bitmap.Map - Unmap, и все, изображение пустое. Если писать через BitmapData напрямую в пикселы - оно показывается на экране.
При этом каким-то странным образом эффект стирания битмапа убирается путем вызова Image1.Bitmap.SaveToFile перед вызовом Map-Unmap,
Исходники пытался читать, причины не нашел.
Кто в курсе, подскажите - что я делаю не так?
P.S. Если читать из файла напрямую в Image1.Bitmap - то при Map-Unmap затираются только изменения полотна, а загруженный рисунок остается. Явно какие-то недокументированные особенности вызова Map-Unmap..
P.P.S. Зло где-то в районе вызова
if H.FAccess in [TMapAccess.ReadWrite, TMapAccess.Write] then
SharedDevice.CopyResource(H.Texture, H.FMapBuffer);
при Unmap.
Осталось придумать, как это побороть и совместить рисование на полотне с прямым доступом к пикселам.
Ссылка на комментарий
3 ответа на этот вопрос
Рекомендуемые сообщения
Присоединяйтесь к обсуждению
Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.