2017-12-07 1 views
0

이미지가 배경으로 연결된 텍스트 상자가 있습니다.base64를 텍스트 상자 배경으로 사용 하시겠습니까?

이 이미지의 base64 버전을 사용하고 싶습니다.

저는 base64가 제대로 작동하는지 확인하기 위해 매우 간단한 windows -form-을 사용했습니다.

내가 문제가되는 부분은 xaml에서 wpf 스타일 GUI로 연결하는 것입니다. 그래서 여기

<TextBox Name="OutTBox" Grid.Column="0" Grid.ColumnSpan="7" Grid.Row="4" Grid.RowSpan="6" Margin="20,5,20,20" Foreground="#FF8CFF8C" IsReadOnly="True" > 
    <TextBox.Background> 
     <ImageBrush ImageSource="C:\background.jpg" Stretch="UniformToFill"/> 
    </TextBox.Background> 
</TextBox> 

내가 창문 양식에 사용되는 base64로 언어이다 :

Add-Type -AssemblyName PresentationFramework 

# Setup the XAML 
[xml]$script:xaml = '<Window 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    Title="base64 image demo" Height="350" Width="650" Background="Black"> 
<Grid> 
    <Image Name="thisistheimage" Stretch="UniformToFill" /> 
</Grid> 
</Window>' 

# Create the form and set variables 
$script:form = [Windows.Markup.XamlReader]::Load((New-Object System.Xml.XmlNodeReader $xaml)) 
$xaml.SelectNodes("//*[@Name]") | ForEach-Object { Set-Variable -Name ($_.Name) -Value $form.FindName($_.Name) -Scope Script } 

# here's the base64 string 

$base64 = "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" 

# Create a streaming image by streaming the base64 string to a bitmap streamsource 
$bitmap = New-Object System.Windows.Media.Imaging.BitmapImage 
$bitmap.BeginInit() 
$bitmap.StreamSource = [System.IO.MemoryStream][System.Convert]::FromBase64String($base64) 
$bitmap.EndInit() 

# Freeze() prevents memory leaks. 
$bitmap.Freeze() 

# Set source here. Take note in the XAML as to where the variable name was taken. 
$thisistheimage.source = $bitmap 

# Show form 
$null = $form.ShowDialog() 

나는 당신에게 내 실제 이미지를 줄 거라고하지만 5K 이상의 라인 길이입니다. 로드하는 데 몇 초 정도 걸립니다. base64가 Xaml에서로드됨을 분명히합니다. 그 그리드 좌표에서 텍스트 상자를 제거하고 그것을 base64로 바꾸면 잘로드됩니다. 두 사람을 함께 일하는 것처럼 보이지 않습니다.

감사합니다.

+1

을 TextBox? – Clemens

+0

예, 그것이 내 뜻입니다. 아마도 솔루션을 찾을 때 잘못된 검색 용어를 사용하고있을 것입니다. 나는 엄격하게 base64 이미지 솔루션을 찾고있었습니다. – Steve

답변

0

내가 PowerShell을 사용한 적이 있지만,이 정도로 간단해야한다 : 당신은 당신이의 배경 속성에 그 ImageBrush와에 비트 맵을 넣어 할당하는 방법을 모르는 의미

$brush = New-Object System.Windows.Media.ImageBrush 
$brush.ImageSource = $bitmap 

$thetextbox.Background = $brush 
+0

그건 분명히 효과가있었습니다. 대단히 감사합니다. 나는 배은망덕 한 말은하지 않지만보다 통합 된 방법이 있습니까? – Steve

+0

ImageBrush에는'$ bitmap'을 전달할 수있는 ImageSource 매개 변수가있는 생성자가 있습니다. Powershell 구문에 대해서는 잘 모르겠지만,'$ thetextbox.Background = New-Object System.Windows.Media.ImageBrush ($ bitmap)'라고 써도 될 것입니다. – Clemens

+0

그리고 나를 믿어, 나는 이것을 시도했다. 잘 전에 나는 이미지 소스로서 변수를 제시하려했지만 결코 대답하지 못했다. 아마 내가 base64를 놓은 곳이 잘못되었습니다. 프리젠 테이션을로드 한 다음 비트 맵 변환, xaml 및 마지막으로 판독기를로드하려고했습니다. GUI를로드하지 않습니다. 나는 해석적인 here-string @ @ "the @ '@ @ restrictive version을 사용하고 있습니다. 나는 현재 드로잉 브러시를 잠재적 인 대답으로보고 있지만 보지 않고 있습니다. – Steve

관련 문제