Форум: "Основная";
Текущий архив: 2006.08.13;
Скачать: [xml.tar.bz2];
ВнизРабота с растровыми изображениями Найти похожие ветки
← →
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;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.045 c