我在这里阅读http://delphi.about.com/od/adptips2005/qt/cleartimage.htm,从TImage中清除图像的一种方法是将nil分配给.Picture,如下所示:
Image1.Picture := nil;
Run Code Online (Sandbox Code Playgroud)
我只是想确定...我想这Image1.Picture.loadFromFile(fileName)将分配一些内存并简单地将其设置为nil,而不释放内存,将导致内存泄漏.
我对么?如果是这样,这是从TImage卸载和清除图像的"正确"方法吗?
在C中你可以做类似的事情
switch(x) {
case 'a':
case 'b':
printf("something");
break;
case 'c':
printf("else");
break;
}
Run Code Online (Sandbox Code Playgroud)
而在Delphi我试过了两个
case x of
'a':
'b': writeln('something');
'c': writeln('else');
end;
Run Code Online (Sandbox Code Playgroud)
和
case x of
['a','b']: writeln('something');
'c': writeln('else');
end;
Run Code Online (Sandbox Code Playgroud)
但他们俩都行不通.
我虽然有不同的解决方案,例如编写程序并将其称为'a'和'b',但我想知道是否有更好的解决方案.我也可以使用goto,像这样:
case x of
'a': goto labelCaseB;
'b': begin
labelCaseB:
writeln('something');
end;
'c': writeln('else');
end;
Run Code Online (Sandbox Code Playgroud)
并且它工作得很好,但在Delphi语言的case语句中,什么是"标准"解决方案?
当然,我的实际情况要复杂得多:在示例中,我会使用if-else;)
我有一些名为DB的字段
picture1_en
picture2_en
...
picture1_de
picture2_de
...
picture1_it
picture2_it
Run Code Online (Sandbox Code Playgroud)
是的,它本可以用另一种方式实现,但我不能改变实现.
假设我有一个名为$ lang的变量,其中包含"de"或"en"或"it"
现在,如果我想打印该值,我可以使用:
for($i=1; $i<=10; ++$i)
echo $r["picture$i_$lang"];
Run Code Online (Sandbox Code Playgroud)
问题是PHP将下划线解释为变量名称的一部分(例如,它将其解释为"$ i_").我尝试以很多疯狂的方式逃避下划线,但都没有工作.
当然,我能做到
echo $r["picture".$i."_".$lang];
Run Code Online (Sandbox Code Playgroud)
但我想知道是否有办法迫使PHP将"_"解释为字符串文字,而不是变量名称的一部分.
单行问题:
是否有一种toDataURL方法可以作用于 <IMG> 元素?
大多数人似乎对如何从 CANVAS 获取 IMG 感兴趣,但我需要相反的内容。
为什么?我需要使用toDataURL()IMG上的方法。
所以,这是我希望现实中存在的伪代码:
var img = document.getElementById('myImage');
var canvas = img.getCanvasFromImage();
var dataURL = canvas.toDataURL();
Run Code Online (Sandbox Code Playgroud)
是否已经有一种方法或解决方法(例如创建一个空画布,在顶部复制 IMG 等)来执行getCanvasFromImage?我找不到一个。
更多详细信息,但无需进一步阅读。
我使用 VIDEO 标签来获取相机流,当用户单击按钮时,我将 CANVAS 复制到 IMG。
但由于我不想在拍照时显示整个图片(我希望它在不同设备上保持一致,无论相机分辨率如何,保持 16:9 的长宽比),所以我只使用object-fit: cover;。
所以,现在我有一个“部分”图像,但如果我在画布上执行 toDataURL,它会给我整个图片,无论“对象适合”值如何。
如果不清楚,没问题:)我只需要一个作用于 <IMG> 元素的“toDataURL”方法:)
OnDrawCell事件给我一个“矩形”记录,以便我知道真正的像素坐标在哪里:
OnDrawCell(Sender: TObject; ACol, ARow: Integer; Rect: TRect; State: TGridDrawState);
Run Code Online (Sandbox Code Playgroud)
另一方面,OnSelectCell只提供行/列坐标。
OnSelectCell(Sender: TObject; ACol, ARow: Integer; var CanSelect: Boolean);
Run Code Online (Sandbox Code Playgroud)
如何将行/列转换为像素坐标?
我需要这些,因为我需要在运行时创建一个组合框来覆盖整个选定的单元格,但仅当选择该单元格时。我知道如何做所有事情,但我不知道如何获取坐标(现在,我只是在父 tStringGrid 的 0,0 处创建组合)。
我使用的是Delphi7,但我认为这是一个普遍问题,与Delphi版本无关。
PS:我知道有很多商业和免费软件组件可以在单元格内实现组合框,但我不能和/或不想使用它们。
谢谢
delphi ×3
canvas ×2
html ×1
image ×1
javascript ×1
php ×1
string ×1
timage ×1
todataurl ×1
tstringgrid ×1