Separate core and images project.

SkImage calls functions on SkImageDecoder and SkImageEncoder. This
is desired behavior, and it is also desired to include SkImage as
a part of core. In order to keep core from depending on images,
update SkImageDecoder_empty.cpp to implement all of SkImageDecoder
and SkImageEncoder. This file will be built by chrome (in
https://codereview.chromium.org/15960015).

Move force_linking from SkImageDecoder.cpp to its own file. It must
be called to force linking with the image decoders if desired. Call
the function in tools that need it:
sk_image
render_pictures
render_pdfs
sk_hello
filter
bench_pictures
debugger

SkImageDecoder:
Derive from SkNoncopyable, instead of duplicating its
hiding of constructors.

skhello:
Return rather than trying to write a null SkData to the stream.

Revert "Hamfistedly removed core dependence on images"
(commit 0f05f682a90bc125323677abf3476e1027d174f5) and
"Move SkImage::encode to SkImage_Codec.cpp."
(commit 83e47a954d0bf65439f3d9c0c93213063dd70da3.)
These two commits were temporary fixes that this change
cleans up.

SkSnapshot.cpp:
Check for a NULL encoder returned by SkImageEncoder::Create.

BUG=https://code.google.com/p/skia/issues/detail?id=1275
R=djsollen@google.com, robertphillips@google.com

Review URL: https://codereview.chromium.org/15806010

git-svn-id: http://skia.googlecode.com/svn/trunk@9364 2bbb7eff-a529-9590-31e7-b0007b416f81
diff --git a/src/image/SkImage_Codec.cpp b/src/image/SkImage_Codec.cpp
index 77ce037..61661de 100644
--- a/src/image/SkImage_Codec.cpp
+++ b/src/image/SkImage_Codec.cpp
@@ -5,11 +5,11 @@
  * found in the LICENSE file.
  */
 
+#include "SkImageDecoder.h"
 #include "SkImage_Base.h"
 #include "SkBitmap.h"
 #include "SkCanvas.h"
 #include "SkData.h"
-#include "../images/SkImageDecoder.h"
 
 class SkImage_Codec : public SkImage_Base {
 public:
@@ -64,40 +64,3 @@
 
     return SkNEW_ARGS(SkImage_Codec, (data, bitmap.width(), bitmap.height()));
 }
-
-///////////////////////////////////////////////////////////////////////////////
-
-// FIXME: Temporarily move this here so chromium can still build until we truly
-// fix the core/images dependency issue (https://code.google.com/p/skia/issues/detail?id=1275)
-#include "SkImage.h"
-#include "../images/SkImageEncoder.h"
-
-static const SkImage_Base* asIB(const SkImage* image) {
-    return static_cast<const SkImage_Base*>(image);
-}
-
-static const struct {
-    SkImageEncoder::Type    fIE;
-    SkImage::EncodeType     fET;
-} gTable[] = {
-    { SkImageEncoder::kBMP_Type,    SkImage::kBMP_EncodeType  },
-    { SkImageEncoder::kGIF_Type,    SkImage::kGIF_EncodeType  },
-    { SkImageEncoder::kICO_Type,    SkImage::kICO_EncodeType  },
-    { SkImageEncoder::kJPEG_Type,   SkImage::kJPEG_EncodeType },
-    { SkImageEncoder::kPNG_Type,    SkImage::kPNG_EncodeType  },
-    { SkImageEncoder::kWBMP_Type,   SkImage::kWBMP_EncodeType },
-    { SkImageEncoder::kWEBP_Type,   SkImage::kWEBP_EncodeType },
-};
-
-SkData* SkImage::encode(EncodeType et, int quality) const {
-    for (size_t i = 0; i < SK_ARRAY_COUNT(gTable); ++i) {
-        if (gTable[i].fET == et) {
-            SkBitmap bm;
-            if (asIB(this)->getROPixels(&bm)) {
-                return SkImageEncoder::EncodeData(bm, gTable[i].fIE, quality);
-            }
-            break;
-        }
-    }
-    return NULL;
-}