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

Вниз

Работа с растровыми изображениями   Найти похожие ветки 

 
SDF   (2006-07-01 09:13) [0]

Вощем, хоть плач уже...
Начальные данные.
TStringGrid два TBitmap Один из них является фоном.
Нужно в ячейку грида нариовать следующее.
Один tBitmap положить как есть, второй, траспарентно наложить на первый.
Как пример. В одном TBitmap находится картинка, лужайки к примеру. НА втором -нарисован дом.
Результат - дом стоит на лужайке.
Спасибо!


 
EvS ©   (2006-07-01 10:49) [1]

>Спасибо!
Пожалуйста.
Суть ясна.Неясно в чем проблема


 
SDF   (2006-07-01 10:56) [2]

Проблема в том, что не получается  у меня.
достиг двух вариантов.
1) Все хорошо, но верняя картинка как бы принимает цвет подложки (дом становится цветом лужайки)
2) Вся ячейка светится всеми цветами радуги где едва можно понять то, что должнобыть там нарисовано
Жду подсказки, а луше ПРОВЕРЕННОГО кода.
Спасибо.


 
Мефисто   (2006-07-01 12:08) [3]

Для начала ждем вашего кода для возможной правки ошибок :)


 
Жуков Олег   (2006-07-01 14:03) [4]

Есть работающий пример, но на WinApi и с использованием маски. В маске прозрачные области - белые, непрозрачные - чёрные.
function TUniverseObject.TryDrawBitmap(const DC: HDC; const CenterX, CenterY: Extended): Boolean;
var
 BitmapDC: HDC;
 SavedStretchBltMode : Integer;
 BitmapInfo: BITMAP;
 MaskBitmapDC: HDC;
begin
   Result := False;
   if FBitmap <> 0 then
   begin
     BitmapDC := CreateCompatibleDC(DC);
     try
       SelectObject(BitmapDC, FBitmap);
       SavedStretchBltMode := SetStretchBltMode(DC, HALFTONE);
       try

         GetObject(FBitmap, SizeOf(BITMAP), @BitmapInfo);

         if FMaskBitmap <> 0 then
         begin
           MaskBitmapDC := CreateCompatibleDC(DC);
           try
             SelectObject(MaskBitmapDC, FMaskBitmap);
             StretchBlt(
               DC,
               Round(CenterX - FRadius),
               Round(CenterY - FRadius),
               Round(FRadius + FRadius),
               Round(FRadius + FRadius),
               MaskBitmapDC,
               0,
               0,
               BitmapInfo.bmWidth,
               BitmapInfo.bmHeight,
               SRCAND
               );
           finally
             DeleteDC(MaskBitmapDC);
           end;
           StretchBlt(
             DC,
             Round(CenterX - FRadius),
             Round(CenterY - FRadius),
             Round(FRadius + FRadius),
             Round(FRadius + FRadius),
             BitmapDC,
             0,
             0,
             BitmapInfo.bmWidth,
             BitmapInfo.bmHeight,
             SRCINVERT
             );

         end else
           // FMaskBitmap = 0
           StretchBlt(
             DC,
             Round(GetLeft()),
             Round(GetTop()),
             Round(FWidth),
             Round(FHeight),
             BitmapDC,
             0,
             0,
             BitmapInfo.bmWidth,
             BitmapInfo.bmHeight,
             SRCCOPY// GetPixel(BitmapDC, 1, 1)
             );
       finally
         SetStretchBltMode(DC, SavedStretchBltMode);
       end;
       Result := True;
     finally
       DeleteDC(BitmapDC);
     end;
   end // if FBitmap <> 0 then

end;


 
SDF   (2006-07-02 07:09) [5]

Весм спасибо. Разобрался, верне помогли.
Function GetSlide(Dest, Source : TBitMap): TBitMap;
begin
  Result:=TBitMap.Create;
  If Assigned(Source)
     then begin
           Result.Width := Dest.Width;
           Result.Height := Dest.Height;
           Source.TransParentColor:=Source.Canvas.Pixels[Source.Width-1,Source.Height-1];
           Source.Transparent:=true;
           Source.TransparentMode := tmAuto;
           Result.Canvas.Draw(0,0,Dest);
           Result.Canvas.Draw(0,0,Source);
          end
     else Result.Assign(Dest);
end;
Ну и потом в грид. Моя ошиба заключалась в том, что я понадеялся на грид, а он, кстати, что и TDrawGrid, такие комбинации -делать не умеет.
как итог -клей все что надо снаружи, а уже потом суй в грид.
Вот так вот.



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

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

Наверх




Память: 0.48 MB
Время: 0.062 c
6-1143539218
Alkid
2006-03-28 13:46
2006.08.13
FastNet


15-1151925090
Stanislav
2006-07-03 15:11
2006.08.13
Авторизация на сайте


3-1149323064
АНОНИМ
2006-06-03 12:24
2006.08.13
Закрыть базу Access


6-1143618622
MegaVolt
2006-03-29 11:50
2006.08.13
Как тестировать сетевое приложение?


2-1154001896
DprYg
2006-07-27 16:04
2006.08.13
Флаг синхронизации, семафор, событие