如何使用带有Delphi 2010的GDIPlus从TImage中获取鼠标光标下像素的alpha值?
我试过这个,但A总是255?我做错了什么?
procedure TFormMain.Image1MouseMove ( Sender: TObject; Shift: TShiftState; X, Y: Integer );
var
GPBitmap: TGPBitmap;
iColorRef: Cardinal;
iColor: TColor;
A, R, G, B: Byte;
iARGB: ARGB;
begin
if Assigned ( Image1.Picture ) then
begin
GPBitmap := TGPBitmap.Create ( Image1.Picture.Bitmap.Handle );
try
// Get alpha 0-255 from GPBitmap
GPBitmap.GetPixel ( X, Y, iColorRef );
iARGB := ColorRefToARGB ( iColorRef );
A := GetAlpha ( iARGB );
AlphaUnderCursor1.Caption := 'Alpha: ' + IntToStr ( A );
iColor := Image1.Canvas.Pixels [ X, Y ];
GetRGB ( iColor, R, G, B );
Shape1.Brush.Color := iColor;
finally
GPBitmap.Free;
end;
end;
答案 0 :(得分:2)
问题是显示器上的图像没有透明度。
在基本级别,您在监视器上看到的每个像素都没有透明度。
即。想象一下,点击 Print Scrn ,然后将桌面副本粘贴到Paint中。您将找不到任何部分透明的像素,因为没有。至少你会看到壁纸的像素。
对不起,不好意思。
答案 1 :(得分:0)
你可以试试这个。秘诀是创建一个后台缓冲区png图像 相同的图像,并从屏幕图像的那个读取alpha通道 鼠标移动事件。以下代码显示了如何实现此目的。
import UIKit
class ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
let client = MSClient()
}
}
使用此图像或具有Alpha透明度的任何其他图像。