如題 ,急,在線等待,馬上揭帖
uj5u.com熱心網友回復:
可能沒有說清楚,就是有兩種影像,一張是jpg的照片,一張是公司的log 影像(PNg透明),想通程序式,把log影像作為jpg影像的水印,該如何做啊??? 等待高手回復uj5u.com熱心網友回復:
這個需要,對應影像1的位影像素,將log圖片顯示的區域和大小,設定好位圖,再將log位圖中的像素通過某種方式,偶合進影像1中。uj5u.com熱心網友回復:
比較早的Delphi不支持pngimage單元,需要另外附加一個。
uses
pngimage,jpeg;
var
jp:TJPEGImage;
png: TPngImage;
tmp:TBitmap;
begin
png:=TPngImage.Create;
jp:=TJPEGImage.Create;
tmp:=Tbitmap.Create;
try
png.LoadFromFile('d:\a.png');
jp.LoadFromFile('d:\b.jpg');
tmp.Assign(jp);
tmp.Canvas.Draw(0,0, png);
jp.Assign(tmp);
Image1.Picture.Assign(jp);
Image1.Picture.SaveToFile('d:\c.jpg');
finally
png.Free;
jp.Free;
tmp.Free;
end;
end;
uj5u.com熱心網友回復:
在控制元件中放入圖片不就行??。。然后在放個image控制元件。。。。
是不是我想的太簡單了。。。。
uj5u.com熱心網友回復:
imageen,或者搜下圖片加水印的代碼,一把一把的uj5u.com熱心網友回復:

方法一:直接將圖片繪制到bmp,然后再將png繪制到bmp ,然后顯示
方法二:用paintBox,自己繪
uj5u.com熱心網友回復:
個人覺得,透明水印應該是源圖片(某個區域)和水印圖片逐像素進行某種運算得到的,用TBitmap的Pixels[x][y]可以得到影像的像素。uj5u.com熱心網友回復:
如果是用的FMX就非常簡單,通過LOGo的alpha通道設定,繪制過去就是半透明的。如果是VCL的話,直接的方法就是使用ScanLine的方式,得到源圖與目標圖的GRBA資料,
定位到要目標圖要繪制的位置 ,然后通過源和目標的BGR三個位元組與源Alpha通道運算來修改目標scanline的資訊就可以了。,
目標R=目標R×((255-源A)/255)+ 源R×源A/255
GB分量與此相同,憑印象寫的,自己在網上查找一下alpha公式就知道了。
uj5u.com熱心網友回復:
如果你對影像處理很強的話,可以將LOG自己畫到from相應的位置上如果你不行的話就用ImageEN控制元件
uj5u.com熱心網友回復:
ImageEN就能實作你的需求uj5u.com熱心網友回復:
1、ImageEN效果并不佳;2、png->TBitMap;
3、對圖進行透明處理
procedure DrawTransparent(MB_Bitmap: TBitmap; MB_x,MB_y: Integer; Y_Bitmap: TBitmap; TrCol: TColor);//MB_Bitmap 目標位圖 Y_Bitmap 源位圖
var
bmpXOR, bmpAND, bmpINVAND, bmpTarget: TBitmap;
oldcol: Longint;
begin
try
bmpAND := TBitmap.Create;
bmpAND.Width := Y_Bitmap.Width;
bmpAND.Height := Y_Bitmap.Height;
bmpAND.Monochrome := True;
oldcol := SetBkColor(Y_Bitmap.Canvas.Handle, ColorToRGB(TrCol));
BitBlt(bmpAND.Canvas.Handle, 0,0, Y_Bitmap.Width, Y_Bitmap.Height,Y_Bitmap.Canvas.Handle, 0,0, SRCCOPY);
SetBkColor(Y_Bitmap.Canvas.Handle, oldcol);
bmpINVAND := TBitmap.Create;
bmpINVAND.Width := Y_Bitmap.Width;
bmpINVAND.Height:= Y_Bitmap.Height;
bmpINVAND.Monochrome := True;
BitBlt(bmpINVAND.Canvas.Handle, 0,0, Y_Bitmap.Width, Y_Bitmap.Height,bmpAND.Canvas.Handle, 0,0, NOTSRCCOPY);
bmpXOR := TBitmap.Create;
bmpXOR.Width := Y_Bitmap.Width;
bmpXOR.Height := Y_Bitmap.Height;
BitBlt(bmpXOR.Canvas.Handle, 0,0, Y_Bitmap.Width, Y_Bitmap.Height,Y_Bitmap.Canvas.Handle, 0,0, SRCCOPY);
BitBlt(bmpXOR.Canvas.Handle, 0,0, Y_Bitmap.Width, Y_Bitmap.Height,bmpINVAND.Canvas.Handle, 0,0, SRCAND);
bmpTarget := TBitmap.Create;
bmpTarget.Width := Y_Bitmap.Width;
bmpTarget.Height := Y_Bitmap.Height;
BitBlt(bmpTarget.Canvas.Handle, 0,0, Y_Bitmap.Width,Y_Bitmap.Height,MB_Bitmap.Canvas.Handle, MB_x,MB_y, SRCCOPY);
BitBlt(bmpTarget.Canvas.Handle, 0,0, Y_Bitmap.Width,Y_Bitmap.Height,bmpAND.Canvas.Handle, 0,0, SRCAND);
BitBlt(bmpTarget.Canvas.Handle, 0,0, Y_Bitmap.Width,Y_Bitmap.Height,bmpXOR.Canvas.Handle, 0,0, SRCINVERT);
BitBlt(MB_Bitmap.Canvas.Handle, MB_x,MB_y, Y_Bitmap.Width, Y_Bitmap.Height,bmpTarget.Canvas.Handle, 0,0, SRCCOPY);
finally
bmpXOR.Free;
bmpAND.Free;
bmpINVAND.Free;
bmpTarget.Free;
end;{End of TRY section}
end;
4、 Image1.Picture.Bitmap:=bmp; 將透明圖片重新匯入Image
5、Image1.Transparent:=TRUE;
uj5u.com熱心網友回復:
使用第三方控制元件:http://download.csdn.net/detail/zwd183335/5029010轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/39547.html
上一篇:如何用Delphi做記事本中的列印功能(仿照window的),急用
下一篇:新人報到, 多多關照
