CARVIEW |
Select Language
HTTP/2 302
date: Sun, 27 Jul 2025 15:42:50 GMT
content-type: text/html; charset=utf-8
content-length: 0
vary: X-PJAX, X-PJAX-Container, Turbo-Visit, Turbo-Frame, X-Requested-With,Accept-Encoding, Accept, X-Requested-With
location: https://gist.github.com/mythz/2321702
cache-control: no-cache
strict-transport-security: max-age=31536000; includeSubdomains; preload
x-frame-options: deny
x-content-type-options: nosniff
x-xss-protection: 0
referrer-policy: origin-when-cross-origin, strict-origin-when-cross-origin
content-security-policy: default-src 'none'; base-uri 'self'; child-src github.githubassets.com github.com/assets-cdn/worker/ github.com/assets/ gist.github.com/assets-cdn/worker/; connect-src 'self' uploads.github.com www.githubstatus.com collector.github.com raw.githubusercontent.com api.github.com github-cloud.s3.amazonaws.com github-production-repository-file-5c1aeb.s3.amazonaws.com github-production-upload-manifest-file-7fdce7.s3.amazonaws.com github-production-user-asset-6210df.s3.amazonaws.com *.rel.tunnels.api.visualstudio.com wss://*.rel.tunnels.api.visualstudio.com objects-origin.githubusercontent.com copilot-proxy.githubusercontent.com proxy.individual.githubcopilot.com proxy.business.githubcopilot.com proxy.enterprise.githubcopilot.com *.actions.githubusercontent.com wss://*.actions.githubusercontent.com productionresultssa0.blob.core.windows.net/ productionresultssa1.blob.core.windows.net/ productionresultssa2.blob.core.windows.net/ productionresultssa3.blob.core.windows.net/ productionresultssa4.blob.core.windows.net/ productionresultssa5.blob.core.windows.net/ productionresultssa6.blob.core.windows.net/ productionresultssa7.blob.core.windows.net/ productionresultssa8.blob.core.windows.net/ productionresultssa9.blob.core.windows.net/ productionresultssa10.blob.core.windows.net/ productionresultssa11.blob.core.windows.net/ productionresultssa12.blob.core.windows.net/ productionresultssa13.blob.core.windows.net/ productionresultssa14.blob.core.windows.net/ productionresultssa15.blob.core.windows.net/ productionresultssa16.blob.core.windows.net/ productionresultssa17.blob.core.windows.net/ productionresultssa18.blob.core.windows.net/ productionresultssa19.blob.core.windows.net/ github-production-repository-image-32fea6.s3.amazonaws.com github-production-release-asset-2e65be.s3.amazonaws.com insights.github.com wss://alive.github.com api.githubcopilot.com api.individual.githubcopilot.com api.business.githubcopilot.com api.enterprise.githubcopilot.com; font-src github.githubassets.com; form-action 'self' github.com gist.github.com copilot-workspace.githubnext.com objects-origin.githubusercontent.com; frame-ancestors 'none'; frame-src viewscreen.githubusercontent.com notebooks.githubusercontent.com; img-src 'self' data: blob: github.githubassets.com media.githubusercontent.com camo.githubusercontent.com identicons.github.com avatars.githubusercontent.com private-avatars.githubusercontent.com github-cloud.s3.amazonaws.com objects.githubusercontent.com release-assets.githubusercontent.com secured-user-images.githubusercontent.com/ user-images.githubusercontent.com/ private-user-images.githubusercontent.com opengraph.githubassets.com copilotprodattachments.blob.core.windows.net/github-production-copilot-attachments/ github-production-user-asset-6210df.s3.amazonaws.com customer-stories-feed.github.com spotlights-feed.github.com objects-origin.githubusercontent.com *.githubusercontent.com; manifest-src 'self'; media-src github.com user-images.githubusercontent.com/ secured-user-images.githubusercontent.com/ private-user-images.githubusercontent.com github-production-user-asset-6210df.s3.amazonaws.com gist.github.com; script-src github.githubassets.com; style-src 'unsafe-inline' github.githubassets.com; upgrade-insecure-requests; worker-src github.githubassets.com github.com/assets-cdn/worker/ github.com/assets/ gist.github.com/assets-cdn/worker/
server: github.com
set-cookie: _gh_sess=TPmM8vKO77udT9AM3l0o4Ktozl0eVy0xk%2FE5gV8eelGBt2iiOZWtcZlUzyvCIQTxs9UeagqOy2M6BG7%2FmJNw8vAb3jL8vsjH3Xlo8BKvRfh4TpdB66c5PWaXRgLupLiJ8AQy2P8KqmSMgiEnTDbgdlixHslt7UfDuYWB6WnlHfrCMrffzhrj5CqtdSZ36M2V9J0hBvYfcSxNMWAvJsNSa9pyBS34d5jX%2Fkv0Z%2FSMl2gRVeI%2BCHkR%2FgccHqcJJdEKlusx%2BfTBXzoElRwALykTgg%3D%3D--qZeCfQQZr9Ke1g7S--%2F2cZgEE5DidVeKWFkk4w%2Bg%3D%3D; Path=/; HttpOnly; Secure; SameSite=Lax
set-cookie: _octo=GH1.1.795793287.1753630969; Path=/; Domain=github.com; Expires=Mon, 27 Jul 2026 15:42:49 GMT; Secure; SameSite=Lax
set-cookie: logged_in=no; Path=/; Domain=github.com; Expires=Mon, 27 Jul 2026 15:42:49 GMT; HttpOnly; Secure; SameSite=Lax
x-github-request-id: C7B0:0A67:4D467E:61FC5C:688648F9
HTTP/2 200
date: Sun, 27 Jul 2025 15:42:50 GMT
content-type: text/html; charset=utf-8
vary: X-PJAX, X-PJAX-Container, Turbo-Visit, Turbo-Frame, X-Requested-With,Accept-Encoding, Accept, X-Requested-With
etag: W/"6baa72ada5f555ef8cc5480e23633036"
cache-control: max-age=0, private, must-revalidate
strict-transport-security: max-age=31536000; includeSubdomains; preload
x-frame-options: deny
x-content-type-options: nosniff
x-xss-protection: 0
referrer-policy: origin-when-cross-origin, strict-origin-when-cross-origin
content-security-policy: default-src 'none'; base-uri 'self'; child-src github.githubassets.com github.com/assets-cdn/worker/ github.com/assets/ gist.github.com/assets-cdn/worker/; connect-src 'self' uploads.github.com www.githubstatus.com collector.github.com raw.githubusercontent.com api.github.com github-cloud.s3.amazonaws.com github-production-repository-file-5c1aeb.s3.amazonaws.com github-production-upload-manifest-file-7fdce7.s3.amazonaws.com github-production-user-asset-6210df.s3.amazonaws.com *.rel.tunnels.api.visualstudio.com wss://*.rel.tunnels.api.visualstudio.com objects-origin.githubusercontent.com copilot-proxy.githubusercontent.com proxy.individual.githubcopilot.com proxy.business.githubcopilot.com proxy.enterprise.githubcopilot.com *.actions.githubusercontent.com wss://*.actions.githubusercontent.com productionresultssa0.blob.core.windows.net/ productionresultssa1.blob.core.windows.net/ productionresultssa2.blob.core.windows.net/ productionresultssa3.blob.core.windows.net/ productionresultssa4.blob.core.windows.net/ productionresultssa5.blob.core.windows.net/ productionresultssa6.blob.core.windows.net/ productionresultssa7.blob.core.windows.net/ productionresultssa8.blob.core.windows.net/ productionresultssa9.blob.core.windows.net/ productionresultssa10.blob.core.windows.net/ productionresultssa11.blob.core.windows.net/ productionresultssa12.blob.core.windows.net/ productionresultssa13.blob.core.windows.net/ productionresultssa14.blob.core.windows.net/ productionresultssa15.blob.core.windows.net/ productionresultssa16.blob.core.windows.net/ productionresultssa17.blob.core.windows.net/ productionresultssa18.blob.core.windows.net/ productionresultssa19.blob.core.windows.net/ github-production-repository-image-32fea6.s3.amazonaws.com github-production-release-asset-2e65be.s3.amazonaws.com insights.github.com wss://alive.github.com api.githubcopilot.com api.individual.githubcopilot.com api.business.githubcopilot.com api.enterprise.githubcopilot.com; font-src github.githubassets.com; form-action 'self' github.com gist.github.com copilot-workspace.githubnext.com objects-origin.githubusercontent.com; frame-ancestors 'none'; frame-src viewscreen.githubusercontent.com notebooks.githubusercontent.com; img-src 'self' data: blob: github.githubassets.com media.githubusercontent.com camo.githubusercontent.com identicons.github.com avatars.githubusercontent.com private-avatars.githubusercontent.com github-cloud.s3.amazonaws.com objects.githubusercontent.com release-assets.githubusercontent.com secured-user-images.githubusercontent.com/ user-images.githubusercontent.com/ private-user-images.githubusercontent.com opengraph.githubassets.com copilotprodattachments.blob.core.windows.net/github-production-copilot-attachments/ github-production-user-asset-6210df.s3.amazonaws.com customer-stories-feed.github.com spotlights-feed.github.com objects-origin.githubusercontent.com *.githubusercontent.com; manifest-src 'self'; media-src github.com user-images.githubusercontent.com/ secured-user-images.githubusercontent.com/ private-user-images.githubusercontent.com github-production-user-asset-6210df.s3.amazonaws.com gist.github.com; script-src github.githubassets.com; style-src 'unsafe-inline' github.githubassets.com; upgrade-insecure-requests; worker-src github.githubassets.com github.com/assets-cdn/worker/ github.com/assets/ gist.github.com/assets-cdn/worker/
server: github.com
content-encoding: gzip
accept-ranges: bytes
x-github-request-id: C7B0:0A67:4D46B0:61FC83:688648F9
Different ways of returning an ImageStream · GitHub
Show Gist options
Save mythz/2321702 to your computer and use it in GitHub Desktop.
{{ message }}
Instantly share code, notes, and snippets.
Created
April 6, 2012 18:04
-
Star
4
(4)
You must be signed in to star a gist -
Fork
0
(0)
You must be signed in to fork a gist
-
Save mythz/2321702 to your computer and use it in GitHub Desktop.
Different ways of returning an ImageStream
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// 3 different ways to return an image. | |
// More info about other responses https://stackoverflow.com/questions/6245616/does-servicestack-support-binary-responses | |
using System; | |
using System.Collections.Generic; | |
using System.Drawing; | |
using System.Drawing.Imaging; | |
using System.IO; | |
using ServiceStack.Common.Web; | |
using ServiceStack.Service; | |
using ServiceStack.ServiceHost; | |
namespace ServiceStack.WebHost.IntegrationTests.Services | |
{ | |
[RestService("/HelloImage")] | |
public class HelloImage {} | |
public class HelloImageService : IService<HelloImage> | |
{ | |
public object Execute(HelloImage request) | |
{ | |
using (Bitmap image = new Bitmap(10, 10)) | |
{ | |
using (Graphics g = Graphics.FromImage(image)) | |
{ | |
g.Clear(Color.Red); | |
} | |
var ms = new MemoryStream(); | |
image.Save(ms, ImageFormat.Png); | |
return new HttpResult(ms, "image/png"); //writes stream directly to response | |
} | |
} | |
} | |
[RestService("/HelloImage2")] | |
public class HelloImage2 {} | |
public class HelloImage2Service : IService<HelloImage2> | |
{ | |
public object Execute(HelloImage2 request) | |
{ | |
using (Bitmap image = new Bitmap(10, 10)) | |
{ | |
using (Graphics g = Graphics.FromImage(image)) | |
{ | |
g.Clear(Color.Red); | |
} | |
using (MemoryStream m = new MemoryStream()) | |
{ | |
image.Save(m, ImageFormat.Png); | |
var imageData = m.ToArray(); //buffers | |
return new HttpResult(imageData, "image/png"); | |
} | |
} | |
} | |
} | |
[RestService("/HelloImage3")] | |
public class HelloImage3 {} | |
//Your own re-usable Custom ImageResult, writes directly to response stream | |
public class ImageResult : IDisposable, IStreamWriter, IHasOptions | |
{ | |
private readonly Image image; | |
private readonly ImageFormat imgFormat; | |
public ImageResult(Image image, ImageFormat imgFormat=null) | |
{ | |
this.image = image; | |
this.imgFormat = imgFormat ?? ImageFormat.Png; | |
this.Options = new Dictionary<string, string> { | |
{ HttpHeaders.ContentType, "image/" + this.imgFormat.ToString().ToLower() } | |
}; | |
} | |
public void WriteTo(Stream responseStream) | |
{ | |
image.Save(responseStream, imgFormat); //Writes to response stream here | |
} | |
public void Dispose() | |
{ | |
this.image.Dispose(); | |
} | |
public IDictionary<string, string> Options { get; set; } | |
} | |
public class HelloImage3Service : IService<HelloImage3> | |
{ | |
public object Execute(HelloImage3 request) | |
{ | |
var image = new Bitmap(10, 10); | |
using (var g = Graphics.FromImage(image)) | |
g.Clear(Color.Red); | |
return new ImageResult(image); //terse + explicit is good :) | |
} | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
You can’t perform that action at this time.
Since IStreamWriter is obsolete now, how would you implement IStreamWriterAsync?