我想有效地为相机预览做一个简单的数码变焦,所以我想我只需要将SurfaceView的大小调整为大于屏幕.其他问题(例如3813049)似乎表明这很容易,所以我创建了下面的示例代码,我希望让我只能看到水平图像的一半(因为SurfaceView的宽度是屏幕的两倍)并且具有图像只占水平屏幕的一半.但是,运行它(当我的Thunderbolt上使用Android 2.2.1定位到SDK版本4时)可以在水平填充屏幕时水平查看整个图像.SurfaceView似乎垂直行为(当我使它小于屏幕时),但Android不允许我使SurfaceView大于屏幕.
如何实现数码变焦?(不,我不能使用Camera.Parameters.setZoom;不仅Android 1.6不支持这种功能,而且不同的相机支持和实现这一点不同)
public class MagnifyTestActivity extends Activity implements SurfaceHolder.Callback {
private MagnificationView mPreview;
private SurfaceHolder mHolder;
private Camera mCamera = null;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mPreview = new MagnificationView(this);
setContentView(mPreview);
mHolder = mPreview.getHolder();
mHolder.addCallback(this);
mHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
}
public class MagnificationView extends SurfaceView {
public MagnificationView(Context context) {
super(context);
}
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
Display display = getWindowManager().getDefaultDisplay();
int width = display.getWidth()*2;
int height = display.getHeight()/2;
widthMeasureSpec = MeasureSpec.makeMeasureSpec(width, MeasureSpec.EXACTLY);
heightMeasureSpec …Run Code Online (Sandbox Code Playgroud) 在VB.NET中,我可以通过导入System.Math并直接引用其方法来使我的数学代码更加清晰:
Imports System.Math
[...]
Return New Vector3(Sin(az) * Cos(el), Cos(az) * Cos(el), Sin(el))
Run Code Online (Sandbox Code Playgroud)
但我不认为C#可以使用类来隐式访问它们的方法,所以我必须做类似的事情:
using System;
[...]
return new Vector3(Math.Sin(az) * Math.Cos(el), Math.Cos(az) * Math.Cos(el), Math.Sin(el));
Run Code Online (Sandbox Code Playgroud)
但那很难看; 它需要自己的滚动条!有没有办法用C#写一些看起来像我的VB.NET代码的东西?我可以为Sin和Cos编写局部包装器方法,但不会降低性能(因为函数调用的开销)?而且,这需要为我正在使用的每个类中使用的每个Math函数编写包装函数; 这也不是那么令人满意.
我想为特定类重载一种类型的subsref调用('(')类型),并保留对Matlab内置subsref的任何其他调用 - 具体来说,我希望Matlab通过'来处理属性/方法访问. " 类型.但是,当在类中重载subsref时,似乎Matlab的"内置"函数不起作用.
考虑这个课程:
classdef TestBuiltIn
properties
testprop = 'This is the built in method';
end
methods
function v = subsref(this, s)
disp('This is the overloaded method');
end
end
end
Run Code Online (Sandbox Code Playgroud)
要使用重载的subsref方法,我这样做:
t = TestBuiltIn;
t.testprop
>> This is the overloaded method
Run Code Online (Sandbox Code Playgroud)
这是预期的.但现在我想调用Matlab的内置subsref方法.为了确保我做得对,首先我尝试对结构进行类似的调用:
x.testprop = 'Accessed correctly';
s.type = '.';
s.subs = 'testprop';
builtin('subsref', x, s)
>> Accessed correctly
Run Code Online (Sandbox Code Playgroud)
这也是预期的.但是,当我在TestBuiltIn上尝试相同的方法时:
builtin('subsref', t, s)
>> This is the overloaded method
Run Code Online (Sandbox Code Playgroud)
... Matlab调用重载方法而不是内置方法.当我请求它调用内置方法时,为什么Matlab会调用重载方法?
更新:回应@Andrew Janke的回答,该解决方案几乎可行,但并不完全.考虑这个课程:
classdef TestIndexing …Run Code Online (Sandbox Code Playgroud) 我的计算机位于路由器后面,它将端口80转发给它(作为端口80).我的问题是HttpListener似乎忽略了发往外部IP地址的请求.
问题不在于路由器; 如果我创建一个空白的C#控制台项目并只添加以下代码行:
System.Net.Sockets.TcpListener s = new System.Net.Sockets.TcpListener(System.Net.IPAddress.Any, 80);
s.Start();
System.Net.Sockets.TcpClient c = s.AcceptTcpClient();
Run Code Online (Sandbox Code Playgroud)
...并运行程序[注意:该程序第一次运行时,用户可能必须允许防火墙例外],如果我导航到它将终止
http://localhost/testpath/
Run Code Online (Sandbox Code Playgroud)
在我的浏览器中或如果我导航到
http://externalipaddress/testpath/
Run Code Online (Sandbox Code Playgroud)
在我的浏览器中 - 任一地址成功尝试端口80连接.因此,一切都设置正确 - 这台计算机可以接受端口80上的内部和外部连接.
现在,如果我创建另一个空白的C#控制台项目并仅添加以下代码行:
System.Net.HttpListener s = new System.Net.HttpListener();
s.Prefixes.Add("http://+:80/testpath/");
s.Start();
System.Net.HttpListenerContext c = s.GetContext();
Run Code Online (Sandbox Code Playgroud)
......首先,我会得到一个HttpListenerException说的访问,因为中提到的问题,否认了这一问题.然后,当我关闭Visual Studio并以管理员身份重新打开它时,它将正常运行.当我导航到该程序时,程序将终止(正确)
http://localhost/testpath/
Run Code Online (Sandbox Code Playgroud)
但是,如果我导航到我的请求,我的请求就会超时
http://externalipaddress/testpath/
Run Code Online (Sandbox Code Playgroud)
为什么我对HttpListener的外部请求超时? 结果可以使用"externalipaddress"的数字IP地址或域名重现,以及子文件夹,斜杠等的许多排列,以及前缀"http://*:80/testpath /","http: // externaldomain:80/testpath /"和"http:// externalipaddress:80/testpath /"(没有空格;为stackoverflow格式化添加).
我在.NET中有一个Image.如何通过使用EXIF数据对其生成的纬度和经度进行编码来对图像进行地理标记,但无需使用外部库?
.net ×2
c# ×2
android ×1
built-in ×1
camera ×1
exif ×1
geotagging ×1
httplistener ×1
image ×1
import ×1
matlab ×1
oop ×1
overriding ×1
surfaceview ×1
syntax ×1
tcplistener ×1
using ×1
zoom ×1