Você está usando o Windows Forms? Se você adicionou a imagem usando a interface do usuário Propriedades / Recursos, obtém acesso à imagem a partir do código gerado, para fazer isso simplesmente:
var bmp =newBitmap(WindowsFormsApplication1.Properties.Resources.myimage);
Não, ele é adicionado como um arquivo simples na pasta Recursos.
Pavel Bastov
9
Ah ok. Nesse caso, acho que o @ Hallgrim tem a resposta para você usando fluxos de recursos. Se você estiver usando o Windows Forms, sugiro que você exclua a imagem e a adicione novamente da interface do usuário - muito mais fácil.
Matt Hamilton
114
Você pode obter uma referência à imagem da seguinte maneira:
Image myImage =Resources.myImage;
Se quiser fazer uma cópia da imagem, faça o seguinte:
Bitmap bmp =newBitmap(Resources.myImage);
Não se esqueça de descartar o bmp quando terminar. Se você não souber o nome da imagem do recurso em tempo de compilação, poderá usar um gerenciador de recursos:
O benefício do ResourceManager é que você pode usá-lo onde Resources.myImage normalmente estaria fora do escopo ou onde você deseja acessar dinamicamente os recursos. Além disso, isso funciona para sons, arquivos de configuração etc.
Estou tentando vincular o objeto de recurso ao meu datagrid, mas ele não está aparecendo usando seu método. A coluna da imagem da grade de dados é padronizada.
Você não precisa usar a reflexão - isso parece muito complicado, considerando os métodos mais simples disponíveis.
30809 Charlie Salts
Esta solução não funciona em C # / Windows Phone .NETCF --GetManifestResourceNames () retorna apenas um único nome, o nome do módulo assembly-DLL. Há apenas um recurso disponível no manifesto - o blob de fluxo do módulo DLL. Sem C ++ e código inseguro que permitem que você faça chamadas à API do Win32, é francamente um problema real trabalhar com esse pedaço de memória.
Mark Jones
2
Você também pode usar typeof(this).Assemblypara abreviar.
Sri Harsha Chilakapati
1
@SriHarshaChilakapati typeof(this)não funcionará. this.GetType().Assemblyé o mais próximo do que você disse, mas é arriscado porque ele pega uma superclasse herdada que pode estar em uma montagem diferente.
John Gibb
2
@SriHarshaChilakapati typeof(this);não compila. Você recebeError 1 Type expected
John Gibb
26
Muito mais fácil do que a maioria das respostas propostas
Não é possível acessar dessa maneira se o arquivo não fizer parte dos manifestos de recursos, pois o OP afirma claramente que foi adicionado como um arquivo.
Wobbles
1
Ele também queria um Bitmapobjeto, não um Imageobjeto.
vapcguy
13
Código que uso em vários de meus projetos ... Pressupõe que você armazene imagens no recurso apenas como bitmaps e não ícones
O melhor é adicioná-los como recursos de imagem nas configurações de recursos no projeto. Em seguida, você pode obter a imagem diretamente fazendo Resources.myimage. Isso obterá a imagem através de uma propriedade C # gerada.
Se você acabou de definir a imagem como Recurso incorporado, poderá obtê-la com:
string name ="Resources.myimage.jpg"string namespaceName ="MyCompany.MyNamespace";string resource = namespaceName +"."+ name;Type type =typeof(MyCompany.MyNamespace.MyTypeFromSameAssemblyAsResource);Bitmap image =newBitmap(type.Assembly.GetManifestResourceStream(resource));
Onde MyTypeFromSameAssemblyAsResource é qualquer tipo que você possui no seu assembly.
Nome de "Resource_Image", você pode encontrar no projeto.
Sob o nome do projeto, você pode encontrar Properties. Expanda. Lá você pode ver o Resources.resxarquivo. Abra. Aplique o nome do arquivo como "Resource_Image".
With e ImageBox chamado "ImagePreview FormStrings.MyImageNames contém um método regular de conversão de seqüência de caracteres get / set, vinculado a uma lista de tipos de caixas de rolagem. As imagens têm os mesmos nomes que os nomes vinculados na lista, exceto as terminações .bmp. bitmaps são arrastados para os resources.resx
No meu caso - eu estava usando ícones em meu recurso, mas precisava adicioná-los dinamicamente como imagens a alguns ToolStripMenuItem. Portanto, no método que eu criei (que é de onde vem o trecho de código abaixo), tive que converter os recursos do ícone em bitmaps antes de poder devolvê-los para adicionar ao meu MenuItem.
Outra coisa a ter em atenção, se a sua imagem / ícone tiver espaços ("") em seu nome quando você os adicionar ao seu recurso, o VS substituirá automaticamente esses espaços por "_" (s). Porque, os espaços não são um caractere válido ao nomear seu recurso. É por isso que estou usando o Replace()método no meu código referenciado. Você provavelmente pode simplesmente ignorar essa linha.
O arquivo de imagem do recurso é "ImageName.png", a extensão do arquivo deve ser omitida.
Talvez o ProjectName possa ser entendido mais adequadamente como "Nome da montagem", que deve ser a respectiva entrada de texto na página Projeto-> Propriedades.
A linha de código de exemplo é executada com sucesso usando a Comunidade do VisualStudio 2015.
Respostas:
Você está usando o Windows Forms? Se você adicionou a imagem usando a interface do usuário Propriedades / Recursos, obtém acesso à imagem a partir do código gerado, para fazer isso simplesmente:
fonte
Você pode obter uma referência à imagem da seguinte maneira:
Se quiser fazer uma cópia da imagem, faça o seguinte:
Não se esqueça de descartar o bmp quando terminar. Se você não souber o nome da imagem do recurso em tempo de compilação, poderá usar um gerenciador de recursos:
O benefício do ResourceManager é que você pode usá-lo onde Resources.myImage normalmente estaria fora do escopo ou onde você deseja acessar dinamicamente os recursos. Além disso, isso funciona para sons, arquivos de configuração etc.
fonte
Você precisa carregá-lo do fluxo de recursos.
Se você deseja conhecer todos os nomes de recursos em sua montagem, vá com:
fonte
typeof(this).Assembly
para abreviar.typeof(this)
não funcionará.this.GetType().Assembly
é o mais próximo do que você disse, mas é arriscado porque ele pega uma superclasse herdada que pode estar em uma montagem diferente.typeof(this);
não compila. Você recebeError 1 Type expected
Muito mais fácil do que a maioria das respostas propostas
fonte
Bitmap
objeto, não umImage
objeto.Código que uso em vários de meus projetos ... Pressupõe que você armazene imagens no recurso apenas como bitmaps e não ícones
fonte
O melhor é adicioná-los como recursos de imagem nas configurações de recursos no projeto. Em seguida, você pode obter a imagem diretamente fazendo Resources.myimage. Isso obterá a imagem através de uma propriedade C # gerada.
Se você acabou de definir a imagem como Recurso incorporado, poderá obtê-la com:
Onde MyTypeFromSameAssemblyAsResource é qualquer tipo que você possui no seu assembly.
fonte
Use abaixo de um. Eu testei isso com a célula de exibição de grade do formulário do Windows.
Nome de "Resource_Image", você pode encontrar no projeto.
Sob o nome do projeto, você pode encontrar
Properties
. Expanda. Lá você pode ver oResources.resx
arquivo. Abra. Aplique o nome do arquivo como "Resource_Image".fonte
With e ImageBox chamado "ImagePreview FormStrings.MyImageNames contém um método regular de conversão de seqüência de caracteres get / set, vinculado a uma lista de tipos de caixas de rolagem. As imagens têm os mesmos nomes que os nomes vinculados na lista, exceto as terminações .bmp. bitmaps são arrastados para os resources.resx
fonte
No meu caso - eu estava usando ícones em meu recurso, mas precisava adicioná-los dinamicamente como imagens a alguns
ToolStripMenuItem
. Portanto, no método que eu criei (que é de onde vem o trecho de código abaixo), tive que converter os recursos do ícone em bitmaps antes de poder devolvê-los para adicionar ao meuMenuItem
.Outra coisa a ter em atenção, se a sua imagem / ícone tiver espaços ("") em seu nome quando você os adicionar ao seu recurso, o VS substituirá automaticamente esses espaços por "_" (s). Porque, os espaços não são um caractere válido ao nomear seu recurso. É por isso que estou usando o
Replace()
método no meu código referenciado. Você provavelmente pode simplesmente ignorar essa linha.fonte
Eu sugiro:
Do msdn: http://msdn.microsoft.com/en-us/library/aa287676(v=vs.71).aspx
Usar Image.FromStream é melhor porque você não precisa saber o formato da imagem (bmp, png, ...).
fonte
A resposta da JDS funcionou melhor. Exemplo de C # carregando imagem:
pictureBox1.Image = ProjectName.Properties.Resources.ImageName;
Observe o seguinte:
A linha de código de exemplo é executada com sucesso usando a Comunidade do VisualStudio 2015.
fonte
Você também pode salvar o bmp em um var como este:
espero que ajude!
fonte
Estranhamente, ao cutucar o designer, encontro o que parece ser uma abordagem muito mais simples:
A imagem parece estar disponível em .Properties.Resources.
Estou simplesmente usando uma imagem, pois tudo o que me interessa é colá-la em um controle com uma imagem nela.
(Net 4.0, VS2010.)
fonte
Olhei o código do designer de um dos meus projetos e notei que ele usava essa notação
onde max é o nome do recurso que carreguei no projeto.
fonte
Ou você pode usar esta linha ao lidar com o WPF ou o Silverlight, especialmente onde você já tem a cadeia de origem na marcação XAML:
Onde o ImagePath é algo como:
fonte
fonte