Есть также кое-что, что вы также можете попробовать. Это может быть не профессионально, но это работает. Разделите изображения на две половины. Нарисуйте первую половину на одной из панелей и вторую половину на другой панели. Обязательно импортируйте System.IO
в ваш проект.
Код для разбиения выглядит следующим образом:
Imports System.IO
...
Public Function SplitImage(ByVal imgpath As String) As Image()
Dim img As Image = Image.FromFile(imgpath)
Dim bmp As Bitmap = DirectCast(img, Bitmap)
Dim i As Integer = bmp.Height / 2
Dim image1 As Bitmap = New Bitmap(bmp.Width, i)
Dim image2 As Bitmap = New Bitmap(bmp.Width, i)
Dim yPos As Integer = 0
For x As Integer = 0 To image1.Width - 1
For y As Integer = 0 To image1.Height - 1
image1.SetPixel(x, y, bmp.GetPixel(x, y))
yPos = y
Next
Next
yPos += 1
Dim ycount As Integer = 0
For x As Integer = 0 To image2.Width - 1
For y As Integer = yPos To bmp.Height - 1
If ycount = i Then
ycount -= 1
End If
image2.SetPixel(x, ycount, bmp.GetPixel(x, y))
ycount += 1
Next
ycount = 0
Next
Dim ms As MemoryStream = New MemoryStream
Dim ms1 As MemoryStream = New MemoryStream
image1.Save(ms, Imaging.ImageFormat.Png)
image2.Save(ms1, Imaging.ImageFormat.Png)
Dim returnedImage(2) As Image
returnedImage(0) = image1
returnedImage(1) = image2
Return returnedImage
End Function
Создайте две формы в вашей форме (Panel1 и Panel2) и кнопку (Button1). Разместите две панели так, как вы хотите, установите для свойства BackgroundImageLayout
панелей значение StretchImage
. Затем из вашего кода вы можете вызвать функцию следующим образом: из события нажатия кнопки:
Public Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
Dim pic() As Image = SplitImage("C:\xxxx.png")
Panel1.BackgroundImage = pic(0)
Panel2.BackgroundImage = pic(1)
End Sub
Для получения дополнительной информации о классе Bitmap
перейдите по этой ссылке Bitmap Class
[117 ]
Необходимо запустить программу CACLS в окнах для предоставления разрешений в файлы и папки. От Nant можно сделать это с ИСПОЛНИТЕЛЬНОЙ задачей.
Попробуйте блок тега как:
<exec program="cacls">
<arg value="*" />
<arg value="/G IIS_WPG:F" />
</exec>
Неисправность @Jeff Ай... Ваше предложение является правильным решением, но параметры... опасны :).
На dev компьютерах я зарегистрирован как администратор, и я попробовал Ваше предложение cmd.
Так, после некоторых тестов правильная команда:
cacls [full folder path] /T /E /G IIS_WPG:F
Мы закончили тем, что писали нашу собственную задачу для этого с некоторым довольно прямым кодом:
[TaskName("addusertodir")]
public class AddUserToDirectorySecurity : Task
{
[TaskAttribute("dir", Required=true)]
public string DirPath { get; set; }
[TaskAttribute("user", Required=true)]
public string UserName { get; set; }
protected override void ExecuteTask()
{
FileSystemAccessRule theRule1 = new FileSystemAccessRule(UserName, FileSystemRights.ListDirectory, AccessControlType.Allow);
FileSystemAccessRule theRule2 = new FileSystemAccessRule(UserName, FileSystemRights.ReadAndExecute, AccessControlType.Allow);
FileSystemAccessRule theRule3 = new FileSystemAccessRule(UserName, FileSystemRights.Read, AccessControlType.Allow);
DirectorySecurity theDirSecurity = new DirectorySecurity();
theDirSecurity.AddAccessRule(theRule1);
theDirSecurity.AddAccessRule(theRule2);
theDirSecurity.AddAccessRule(theRule3);
Directory.SetAccessControl(DirPath, theDirSecurity);
}
}
Затем можно записать nant сценарий, который загружает пользовательскую задачу и выполняется:
<loadtasks>
<fileset>
<include name="MyTask.dll"/>
</fileset>
</loadtasks>
<addusertodir dir="MyDir" user="IIS_WPG"/>
Очевидно, это могло быть изменено для Ваших определенных правил, или Вы могли даже параметризовать это в задаче если Вы, так пожелайте. Мы предпочли это по использованию исполнительной задачи, поскольку это имеет нас немного больше управления полномочиями, которые применялись.