Bug with GetPixels()?

Hello guys,

I don't know if this is a bug. Take a look at this code:

private Texture2D tempTexture;

private void CopyToTestTexture(Texture2D source) {
  if (tempTexture == null) {
    tempTexture = new Texture2D(source.width, source.height);


  GUITexture testGuiTexture = GameObject.Find("Test").guiTexture;
  testGuiTexture.texture = tempTexture; // just to render to see if it copied it well

It just copies the specified source texture unto a temporary using SetPixels(). It works fine for power-of-2 textures, but not for non power-of-2 textures.

What I'm trying to achieve is get a pixel from the texture, check its alpha against a certain threshold such that I can flag it as a collision hit when clicked. My game requires that clicking on a transparent part of the image should not trigger a hit. Maybe you can give another solution.

Note that my textures are imported with:

void OnPreprocessTexture() {
    TextureImporter importer = (TextureImporter) assetImporter;
    importer.textureType = TextureImporterType.Advanced;
    importer.npotScale  = TextureImporterNPOTScale.None;
    importer.isReadable = true;

I can't scale textures because it produces visual artifacts on the scene. I am porting a hidden object game. You might have other ideas.

Hi Pennylane,

as I have seen your post is outdated a little. But I came across this problem recently too.

The solution is simple: set your Texture format to ARGB32, RGBA32 or Alpha8.
See: http://unity3d.com/support/documentation/ScriptReference/Texture2D.SetPixels.html

The default “Automatic compressed” does not work here with npo2 textures.


TY m8! in your code (even though i dont know whats wrong in it), ive finally found the obvius about using getPixels and SetPixels in order to load a saved image into a texture!

This was the one i needed :

mainBG.SetPixels(mainBGSource.GetPixels()); so simplem but couldnt find it anywhere else :wink:

It is only support texture2D