Главная страница
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.047 c
3-1149768298
fuckman
2006-06-08 16:04
2006.08.13
Ошибка "Multiple record found, but only one was expected"


11-1130756522
xsepa
2005-10-31 14:02
2006.08.13
как создать Shape используя KOL


2-1153839112
WolfRamm
2006-07-25 18:51
2006.08.13
Zeos


15-1153122414
Ega23
2006-07-17 11:46
2006.08.13
Чуть не умер со смеху


2-1153692356
Soubi
2006-07-24 02:05
2006.08.13
добавление компонента