有没有办法将Jpeg图像与附加的stringgrid中显示的相应像素温度融合。 融合后,鼠标环绕并从图像中读取温度。 如果有,请任何人都可以告诉我如何。
谢谢你,AmmadeuX
答案 0 :(得分:2)
据我所知,您手头有三个不同的问题。我将在下面指出它们以及答案。但是,您需要尽最大努力自己完成这些类型的项目,如果您有特定问题需要解决,请在此处提出问题。问“如何做某事”总是主观的。
问题2和3是或者解决方案,这意味着每个问题可以是一个不同的问题,并且可以完全分开地回答。但他们两人仍然依赖第一个问题。
问题1:“如何识别鼠标指向的像素的颜色?”
我假设您使用标准TImage
控件及其默认属性,并且未设置为重新调整大小,拉伸或居中图像。如果你需要这样做,那就有不同的方法。
首先,您必须确定鼠标指向哪个像素。有几种方法可以做到这一点,但取决于你用来显示图像的控件(我假设标准为TImage
),我建议使用鼠标移动事件(OnMouseMove
)捕获鼠标在此控件上的移动。此时,您需要识别当前的鼠标位置。值得庆幸的是,此事件带有鼠标指针的X和Y位置。
然后,您需要获取图像的画布。您可以通过以下方式获得:
TImage.Picture.Bitmap.Canvas
接下来,阅读Canvas'Pixels[]
属性以获取颜色。
问题2:“如何确定颜色在From / To比例上的位置?”
现在您知道鼠标指向的颜色,您需要确定此颜色所属的比例位置。为此,最简单的方法是只使用1个颜色通道。上面的例子说明了不同颜色的组合和淡化,这对我来说太难以解释。请问这是一个额外的问题,因为它需要我自己的想法,我不能做(需要大量的数学,我不擅长)。
问题3:“如何将图像链接到数据表?”
由于您有一个温度读数表,您需要根据上面第一个问题中提供的单个像素按列/行读取此表。
由于您已经知道鼠标的X / Y位置,因此请使用这些相同的变量来标识网格的列/行。 (我不鼓励使用网格作为存储此数据的主要基础,您应该使用客户端数据集,并使用该数据动态加载网格。)
<强>结论:强>
这是我为您准备的示例应用程序的代码。它应该可以帮助您了解您正在做的事情背后的基础知识。你必须选择自己的图像,因为我不想用原始图像数据污染这个答案的代码。
注意:一旦您编辑问题以明确如何您希望图像链接到数据,那么我将修改我的答案。否则,这是我能解释的最佳状态。
<强> Unit1.pas 强>
unit Unit1;
interface
uses
Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.ExtCtrls, Vcl.StdCtrls, Vcl.ComCtrls;
type
TForm1 = class(TForm)
Image1: TImage;
Shape1: TShape;
StatusBar1: TStatusBar;
procedure Image1MouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.Image1MouseMove(Sender: TObject; Shift: TShiftState;
X, Y: Integer);
var
Color: TColor;
Canvas: TCanvas;
R, G, B: Byte;
begin
Canvas:= Image1.Picture.Bitmap.Canvas;
Color:= Canvas.Pixels[X, Y];
Shape1.Brush.Color:= Color;
R:= GetRValue(Color);
G:= GetGValue(Color);
B:= GetBValue(Color);
StatusBar1.Panels[0].Text:= 'Pos: '+IntToStr(X)+' x '+IntToStr(Y);
StatusBar1.Panels[1].Text:= 'Clr: '+IntToStr(Color);
StatusBar1.Panels[2].Text:= 'RGB: '+IntToStr(R)+' x '+IntToStr(G)+' x '+IntToStr(B);
end;
end.
<强> Unit1.dfm 强>
object Form1: TForm1
Left = 315
Top = 113
Caption = 'Form1'
ClientHeight = 415
ClientWidth = 548
Color = clBtnFace
Font.Charset = DEFAULT_CHARSET
Font.Color = clWindowText
Font.Height = -11
Font.Name = 'Tahoma'
Font.Style = []
OldCreateOrder = False
DesignSize = (
548
415)
PixelsPerInch = 96
TextHeight = 13
object Image1: TImage
Left = 0
Top = 0
Width = 548
Height = 281
Align = alTop
Anchors = [akLeft, akTop, akRight, akBottom]
OnClick = Image1Click
OnMouseMove = Image1MouseMove
end
object Label1: TLabel
Left = 8
Top = 285
Width = 31
Height = 13
Anchors = [akLeft, akBottom]
Caption = 'Label1'
end
object Shape1: TShape
Left = 8
Top = 312
Width = 532
Height = 57
Anchors = [akLeft, akRight, akBottom]
end
object StatusBar1: TStatusBar
Left = 0
Top = 396
Width = 548
Height = 19
Panels = <
item
Width = 150
end
item
Width = 150
end
item
Width = 50
end>
end
end